我试着执行下面的代码:
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代码可以做到这一点,但不完全是因为上面提到的错误。
暂无答案!
目前还没有任何答案,快来回答吧!