我尝试使用Criteria API来获取由其List<Csr>
属性排序的severidadeRecente
。
我使用的实体和关系:
@Entity
@Table(name = "csr")
public class Csr implements Serializable {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "csr")
private List<CsrSeveridadeLog> severidadeLogList;
//Used to get and set the most recent Severidade
@Transient
private CsrSeveridadeLog severidadeRecente;
public CsrSeveridadeLog getSeveridadeRecente() {
Calendar compare = null;
CsrSeveridadeLog recente = null;
for (CsrSeveridadeLog log : severidadeLogList) {
if (compare == null) {
compare = log.getData();
recente = log;
}
if (log.getData().after(compare)) {
recente = log;
}
}
return recente;
}
我使用以下条件查询:
Criteria criteria = session.createCriteria(Csr.class,"csr");
if ("severidadeRecente".equals(filtro.getPropriedadeOrdenacao())) {
criteria.createAlias("csr.severidadeRecente", "severidadeRecente");
}
filtro.getPropriedadeOrdenacao()
来自客户。
但我得到以下例外:
引起:org.hibernate.QueryException:无法解析属性:severidadeRecente:br.com.timbrasil.bluemonster.modelo.Csr
我该如何解决?我需要根据我的实体所拥有的List
订购我的表,并在该列表中记录最新记录。
答案 0 :(得分:1)
您是否已在severidadeRecente
课程中使用正确的getter和setter提交了Csr
?
<强>更新强>
As @ ChssPly76 said:
您无法直接在Criteria API中使用嵌套路径(与HQL不同)。 相反,您需要创建嵌套条件实例或定义 每个&#34; entity.property&#34;上的别名从第一个开始 非根实体
所以尝试做这样的事情:
criteria.createAlias("csr", "c")
.createAlias("c.severidadeRecente", "severidadeRecente")