8

有没有一种方法可以通过 JPA 标准查询来订购?想象以下领域对象:

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

4

1 回答 1

10

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

您可以使用带有 Criteria API 的类型表达式,使用Path#type(). 所以你可以尝试

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 节“实体类型表达式”

更多资源

于 2010-11-16T00:07:26.197 回答