2010-05-10 50 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