【问题标题】:JPA criteria query, order on classJPA 条件查询,按类排序
【发布时间】:2011-05-10 11:00:33
【问题描述】:

JPA 标准查询有没有办法在 class 上排序?想象一下以下领域对象:

abstract class Hobby { ... }
class Coding extends Hobby { ... }
class Gaming extends Hobby { ... }

使用常规 QL 我可以做到

from Hobby h order by h.class

但是当我对条件查询应用相同的逻辑时,会发生运行时异常“未知属性”。

CriteriaQuery<Hobby> criteriaQuery = builder.createQuery(Hobby.class);
Root<Hobby> hobbyRoot = criteriaQuery.from(Hobby.class);
criteriaQuery.orderBy(builder.asc(hobbyRoot.get("class"));
List<Hobby> hobbies = entityManager.createQuery(criteriaQuery).getResultList();

使用的 JPA 实现:Hibernate-EntityManager v3.5.5-Final

【问题讨论】:

    标签: hibernate jpa jpa-2.0 criteria-api


    【解决方案1】:

    JPA 2.0 引入了一个新的TYPE 表达式,它允许查询根据类类型来限制结果。

    您可以使用 Path#type() 将类型表达式与 Criteria API 一起使用。所以你可以试试

    CriteriaQuery criteriaQuery = builder.createQuery(Hobby.class);
    Root hobbyRoot = criteriaQuery.from(Hobby.class);
    criteriaQuery.orderBy(builder.asc(hobbyRoot.type());
    List hobbies = entityManager.createQuery(criteriaQuery).getResultList();

    虽然这段代码可以编译,但我没有对其进行测试(明天我会试一试)。

    实际上,我想知道这是否合法,或者type() 是否应该成为选择的一部分以便order by 它(也许这就是条件查询应该生成的内容)。需要检查一下。

    参考文献

    • JPA 2.0 规范
      • 第 4.6.17.4 节“实体类型表达式”

    更多资源

    【讨论】:

    猜你喜欢
    • 2021-09-12
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多