首页 > 解决方案 > org.hibernate.HibernateException:未知实体:null - 不识别子标准中的标准别名

问题描述

我试图执行下面的代码:

            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.credencialAlias.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代码做到了这一点,但不完全是因为提到的错误。

标签: javahibernate

解决方案


推荐阅读