gpt4 book ai didi

hibernate - JPA 条件查询,上课顺序

转载 作者:行者123 更新时间:2023-12-04 07:29:04 25 4
gpt4 key购买 nike

是否可以通过 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

最佳答案

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

  • 更多资源
  • Java Persistence 2.0 Proposed Final Draft
  • 关于hibernate - JPA 条件查询,上课顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188397/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com