2015-05-19 59 views
0

我試圖使用Criteria API來獲取按其瞬態severidadeRecente屬性排序的List<Csr>瞬態屬性會導致org.hibernate.QueryException:無法解析屬性:severidadeRecente:br.com.timbrasil.bluemonster.modelo.Csr

實體和我使用的關係:

@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

您是否找到解決方案? – kavain

+0

@kavain我不得不改變我的方法,但szarpul的答案是正確的。 我不得不使用列表並在Csr類中使用CsrSeveridadeLog,這樣我就可以使用該命令。 希望它有幫助 – prabello

+0

你想介紹一下我的問題嗎? http://stackoverflow.com/questions/32598960/how-to-make-a-criteria-with-select-order-by-avg-function-in-a-one-to-many-re – kavain

回答

1

您是否在Csr類中提交了severidadeRecente以適當的getter和setter?

UPDATE:

正如@ ChssPly76 said

您不能直接在標準API(不像HQL)使用嵌套的路徑。 相反,你需要創建嵌套的標準實例或每個「entity.property」對定義 別名開始與第一 非根實體

因此,嘗試做這樣的事情:

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

是的,我有用@Transient標記的字段severidadeRecente,在提交訂單的那一刻,獲取者就是這個問題。 – prabello

+0

我已經做了更新。 – Szarpul

+0

結果相同。 我更新我的問題,我正在省略創建標準: Criteria criteria = session.createCriteria(Csr.class,「csr」); 要麼做csr.severidadeRecente或給csr一個新的別名是相同的,不是嗎? – prabello

相關問題