java - 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代码做到了这一点,但不完全是因为提到的错误。
解决方案
推荐阅读
- c# - 如何编写多个 RouteValues?
- mysql - 如何从 MySQL 中的 JSON 对象将键和值存储在表中
- google-apps-script - 在提交时将 Google 表单回复发送到指定的电子邮件地址
- javascript - 如何等到数据被获取并使用 redux 更新状态
- android - 无法使用标准 firebase 在管理员 firebase 用户下创建用户,因为它已启动当前用户
- php - 在 centos 上从 src 代码编译 PHP5.5 失败
- javascript - 从包含特定字符的字符串中获取单词。(像 # 或 @ 例如一个帖子规划师)
- canvas - 是否可以在画布上为每个操作设置一个过滤器?
- android - Android Studio 更新重复 Java 和 res 文件夹
- typescript - 具有联合类型的类型不存在属性