2010-05-10 48 views
5

我想爲兩個持久化類組合查詢。Hibernate Criteria API等價於HQL select子句?

在HQL這可以通過選擇子句來實現,

select new Family(mother, mate, offspr) 
    from DomesticCat as mother 
     join mother.mate as mate 
     left join mother.kittens as offspr 

在上述例子中,家庭是輔以化療類DemesticCat作爲其construtor PARAMS

什麼是標準相當於HQL的選擇條款?

回答

5

您必須爲此使用ResultTransformer。該Hibernate 3.2: Transformers for HQL and SQL博客文章給出了下面的例子(StudentDTO是一個非實體bean):

List resultWithAliasedBean = s.createCriteria(Enrolment.class) 
    .createAlias("student", "st").createAlias("course", "co") 
    .setProjection(Projections.projectionList() 
        .add(Projections.property("st.name"), "studentName") 
        .add(Projections.property("co.description"), "courseDescription") 
     ) 
      .setResultTransformer(Transformers.aliasToBean(StudentDTO.class)) 
      .list(); 

StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0); 
+0

非常感謝!這正是我期待的! 似乎標準幾乎與HQL一樣強大。 謝謝! – 2010-05-10 10:36:28

1

在Criteria API中,此功能由Projections處理。文檔有點混亂和過於複雜,但這就是你需要看的。

+0

skaffman: 感謝您的快速答覆。 我剛剛介紹了投影部分,發現 PropProjection.Property.forName(「name」) 可用於過濾結果的列子集, 但我找不到映射兩個Persistance班級轉換爲新班級,就像上面例子中的Family班級一樣? 你可以點亮一下嗎? – 2010-05-10 10:19:05