【问题标题】:Hibernate Criteria API equivalent to HQL select clause?Hibernate Criteria API 等效于 HQL 选择子句?
【发布时间】:2011-02-17 14:36:44
【问题描述】:

我想要对两个持久类进行组合查询。

在 HQL 中,这可以通过 select 子句来实现,

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

在上面的例子中,Family 是一个以 DemesticCat 作为其构造器参数的组合类

HQL 选择子句的 Criteria 等效项是什么?

【问题讨论】:

    标签: java hibernate orm hql criteria


    【解决方案1】:

    您必须为此使用ResultTransformerHibernate 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);  
    

    【讨论】:

    • 非常感谢!这正是我一直在寻找的!似乎 Criteria 几乎和 HQL 一样强大。谢谢!
    【解决方案2】:

    在 Criteria API 中,此功能由 Projections 处理。文档有点混乱和过于复杂,但这是您需要查看的内容。

    【讨论】:

    • skaffman:感谢您的快速回答。我只是简要介绍了 Projections 部分,发现 PropProjection.Property.forName("name") 可用于过滤列的子集作为结果,但我找不到将两个 Persistance 类映射到新类的 Projection ,像上面例子中的 Family 类?你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2013-07-24
    • 2019-07-13
    • 2010-10-02
    • 2011-08-17
    相关资源
    最近更新 更多