org.hibernate.hibernateexception:未知实体:null-不识别子标准中的标准别名

cxfofazt  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(264)

我试着执行下面的代码:

criteria.createAlias("veiculosCredencial", "veiculoCredencialAlias");
            criteria.add(Restrictions.isNull("cancelamentoCredencial"));
            DetachedCriteria subcriteria = DetachedCriteria.forClass(CredencialXVeiculo.class, "cv");
            subcriteria.add(Restrictions.eq("cv.credencialXVeiculoPK.credencialCttuPK.modal", filtro.getModalEquals()));
            subcriteria.add(Restrictions.isNull("cv.fimVinculo"));
            subcriteria.add(Property.forName("cv.credencialXVeiculoPK.CredencialCttuPK.id").eqProperty("veiculoCredencialAlias.credencialAlias.credencialXVeiculoPK.CredencialCttuPK.id") );
            subcriteria.setProjection(Projections.property("cv.credencialXVeiculoPK.credencialCttuPK"));
            criteria.add(Subqueries.notExists(subcriteria));

因此,出现以下错误:org.hibernate.hibernateexception:unknown entity:null发生此问题是因为我希望它能够识别在子标准中的条件中创建的别名:
subcriteria.add(property.forname(“cv.credencialxveiculopk.credencialcttupk.id”).eqproperty(“veiculocredencialalias.credencialais.credencialxveiculopk.credencialcttupk.id”));
如何正确地执行此操作?
主要实体

@Audited
@AuditTable(value = "TBCREDENCIALCTTUHIST")
@Table(name = "SCTR.TBCREDENCIALCTTU")
@Entity
public class CredencialCttu implements Serializable {

    private static final long serialVersionUID = -8315891299493474295L;

    @EmbeddedId
    private CredencialCttuPK credencialCttuPK;

    @NotNull
    @Column(name = "DCREDEDTCR")
    private Date criacaoCredencial;

    @Column(name = "DCREDEDTCN")
    private Date cancelamentoCredencial;

    @Column(name = "XCREDEOBSE")
    private String observacaoCredencial;

    @Column(name = "CTPTXIORIG")
    private String placaVeiculo;

    @Column(name = "CTPTXITIPO")
    private String tipoTaxi;

    @NotNull
    @Column(name = "TCREDEULAT")
    private Date ultimaAtualizacao;

    @ManyToOne
    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    @JoinColumn(name = "CTPCRDCODG") 
    private TipoCredencial tipoCredencial;

    @OneToOne
    @JoinColumn(name = "CMDALCCODG", insertable = false, updatable = false)
    @NotAudited
    private Modal modal;

//  @OneToOne
//  @JoinColumn(name = "CCREDECODG", insertable = false, updatable = false)
//  @NotAudited
//  private long sequencialCredencial;

    @Transient
    private List<PessoaWS> pessoasWs;

    @OrderBy(clause = "fimVinculo DESC")
    @OneToMany(mappedBy = "credencialXVeiculoPK.credencialCttuPK", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<CredencialXVeiculo> veiculosCredencial;

    @OneToMany(mappedBy = "credencialXPessoaPK.credencialCttuPK", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<CredencialXPessoa> pessoasCredencial;  

    @OneToMany(mappedBy = "capXLinhaPK.credencialCttuPK", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<CapXLinha> linhasCredencial;

    @OneToMany(mappedBy = "credencialXLocalAtendimentoPK.credencialCttuPK", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<CredencialXLocalAtendimento> locaisCredencial;

    @OneToMany(mappedBy = "corridasCredencialPK.credencialCttuPK", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<CorridasCredencial> corridasCredencial;

    @OneToMany(mappedBy = "credencial")
    @NotAudited
    private List<Anexo> anexos;

    @OneToMany(mappedBy = "credencialCttu", cascade = CascadeType.ALL, orphanRemoval = true)
    @NotAudited
    private List<Cobranca> cobrancas;

//  @NotAudited
//  @Formula("(SELECT * FROM SCTR.TBCREDENCIALXVEICULO AS c WHERE c.CCREDECODG = CCREDECODG  AND c.CMDALCCODG = CMDALCCODG  AND c.DCREVCDTFV IS NULL )")    
//  private CredencialXVeiculo veiculoAtivoDaCredencial; // Isso é um CredencialXVeiculo, não é Veiculo

//  public CredencialXVeiculo getVeiculoAtivoDaCredencial() {
//      return veiculoAtivoDaCredencial;
//  }
//
//  public void setVeiculoAtivoDaCredencial(CredencialXVeiculo veiculoAtivoDaCredencial) {
//      this.veiculoAtivoDaCredencial = veiculoAtivoDaCredencial;
//  }
    //Guarda a ultima data de entrada de permissionario ou autorizatário na credencial
    @NotAudited
    @Formula("(SELECT MAX(t.TCREPSDTIN) FROM SCTR.TBCREDENCIALXPESSOA t WHERE t.CCREDECODG = CCREDECODG AND t.CMDALCCODG = CMDALCCODG AND t.ATPPSSSEQU IN (1,2))")
    private Date LastDtEntradaPermoOuAutor;

    public List<PessoaWS> getPessoasWs() {
        if (pessoasWs == null) {
            pessoasWs = new ArrayList<>();
        }
        return pessoasWs;
    }

    public void setPessoasWs(List<PessoaWS> pessoasWs) {
        this.pessoasWs = pessoasWs;
    }

    public CredencialCttu() {
        this.credencialCttuPK = new CredencialCttuPK();
    }

    public CredencialCttu(Long id) {
        super();
        this.credencialCttuPK.setId(id);

    }

    public Long getId() {
        return this.credencialCttuPK.getId();
    }

    public void setId(Long id) {
        this.credencialCttuPK.setId(id);
    }

    public Modal getModal() {
        return credencialCttuPK.getModal();
    }

    public void setModal(Modal modal) {
        this.credencialCttuPK.setModal(modal);
    }

    public CredencialCttuPK getCredencialCttuPK() {
        return credencialCttuPK;
    }

    public void setCredencialCttuPK(CredencialCttuPK credencialCttuPK) {
        this.credencialCttuPK = credencialCttuPK;
    }

    public Date getCriacaoCredencial() {
        return criacaoCredencial;
    }

    public void setCriacaoCredencial(Date criacaoCredencial) {
        this.criacaoCredencial = criacaoCredencial;
    }

    public Date getCancelamentoCredencial() {
        return cancelamentoCredencial;
    }

    public void setCancelamentoCredencial(Date cancelamentoCredencial) {
        this.cancelamentoCredencial = cancelamentoCredencial;
    }

    public String getObservacaoCredencial() {
        return observacaoCredencial;
    }

    public void setObservacaoCredencial(String observacaoCredencial) {
        this.observacaoCredencial = observacaoCredencial;
    }

    public String getPlacaVeiculo() {
    if (placaVeiculo != null) {
        return placaVeiculo;
    }
    return "NÃO INFORMADO";
    }

    public void setPlacaVeiculo(String placaVeiculo) {
        this.placaVeiculo = placaVeiculo;
    }

    public String getTipoTaxi() {
        return tipoTaxi;
    }

    public void setTipoTaxi(String tipoTaxi) {
        this.tipoTaxi = tipoTaxi;
    }

    public List<CredencialXPessoa> getPessoasCredencial() {
        return pessoasCredencial;
    }

    public void setPessoasCredencial(List<CredencialXPessoa> pessoasCredencial) {
        this.pessoasCredencial = pessoasCredencial;
    }

    public List<CredencialXVeiculo> getVeiculosCredencial() {
        return veiculosCredencial;
    }

    public void setVeiculosCredencial(List<CredencialXVeiculo> veiculosCredencial) {
        this.veiculosCredencial = veiculosCredencial;
    }

    public List<CorridasCredencial> getCorridasCredencial() {
        return corridasCredencial;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    public List<Cobranca> getCobrancas() {
        return cobrancas;
    }

    public void setCobrancas(List<Cobranca> cobrancas) {
        this.cobrancas = cobrancas;
    }

    public void setCorridasCredencial(List<CorridasCredencial> corridasCredencial) {
        this.corridasCredencial = corridasCredencial;
    }

    public List<CapXLinha> getLinhasCredencial() {
        return linhasCredencial;
    }

    public void setLinhasCredencial(List<CapXLinha> linhasCredencial) {
        this.linhasCredencial = linhasCredencial;
    }

    public List<CredencialXLocalAtendimento> getLocaisCredencial() {
        return locaisCredencial;
    }

    public void setLocaisCredencial(List<CredencialXLocalAtendimento> locaisCredencial) {
        this.locaisCredencial = locaisCredencial;
    }

    public Date getUltimaAtualizacao() {
        return ultimaAtualizacao;
    }

    public void setUltimaAtualizacao(Date ultimaAtualizacao) {
        this.ultimaAtualizacao = ultimaAtualizacao;
    }   

    public TipoCredencial getTipoCredencial() {
        return tipoCredencial;
    }

    public void setTipoCredencial(TipoCredencial tipoCredencial) {
        this.tipoCredencial = tipoCredencial;
    }

//  public Integer getSequencial_veiculo_ativo() {
//      return sequencial_veiculo_ativo;
//  }
//
//  public void setSequencial_veiculo_ativo(Integer sequencial_veiculo_ativo) {
//      this.sequencial_veiculo_ativo = sequencial_veiculo_ativo;
//  }

    public Date getLastDtEntradaPermoOuAutor() {
        return LastDtEntradaPermoOuAutor;
    }

    public void setLastDtEntradaPermoOuAutor(Date lastDtEntradaPermoOuAutor) {
        LastDtEntradaPermoOuAutor = lastDtEntradaPermoOuAutor;
    }

ps:我的目的是用hibernate特性进行查询

SELECT c.CMDALCCODG, c.CCREDECODG, c.DCREDEDTCR, c.DCREDEDTCN, c.CTPTXIORIG, c.CTPTXITIPO,c.XCREDEOBSE
FROM   SCTR.TBCREDENCIALCTTU c, SCTR.TBCREDENCIALXVEICULO cv1
WHERE  c.CMDALCCODG  = cv1.CMDALCCODG AND
       c.CCREDECODG  = cv1.CCREDECODG AND
       cv1.CMDALCCODG  = 2 AND
       c.DCREDEDTCN IS NULL AND
       NOT EXISTS (SELECT cv2.AVECLOSEQU 
                   FROM SCTR.TBCREDENCIALXVEICULO  cv2
                   WHERE cv2.DCREVCDTFV IS NULL AND
                         cv2.CMDALCCODG  = 2 AND
                         cv2.CCREDECODG = cv1.CCREDECODG)
ORDER BY 2

上面的java代码可以做到这一点,但不完全是因为上面提到的错误。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题