瞬态属性导致org.hibernate.QueryException:无法解析属性:severidadeRecente:br.com.timbrasil.bluemonster.modelo.Csr

时间:2015-05-19 22:31:19

标签: hibernate jpa criteria transient

我尝试使用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订购我的表,并在该列表中记录最新记录。

1 个答案:

答案 0 :(得分:1)

您是否已在severidadeRecente课程中使用正确的getter和setter提交了Csr

<强>更新

As @ ChssPly76 said

  

您无法直接在Criteria API中使用嵌套路径(与HQL不同)。   相反,您需要创建嵌套条件实例或定义   每个&#34; entity.property&#34;上的别名从第一个开始   非根实体

所以尝试做这样的事情:

criteria.createAlias("csr", "c")
.createAlias("c.severidadeRecente", "severidadeRecente")