当前位置: 首页 > 面试题库 >

JPA条件查询,订购课程

益清野
2023-03-14
问题内容

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


问题答案:

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()应该将select作为选择的一部分order by(也许这就是标准查询应该生成的内容)。需要检查一下。

参考文献

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

更多资源

  • Java Persistence 2.0建议的最终草案


 类似资料:
  • 现在我扪心自问,是不是有什么“点符号”或者其他什么东西让这个案例变得可有可无。在E。例如:本机SQL我会做一些事情,比如创建一个子查询,并从内部投影中选择所有别名值()。 如果有任何建议,我将不胜感激。

  • 问题内容: 我从查询中返回了要按最佳匹配顺序进行排序的结果列表。我会尽我所能地保持清晰,但是如果某些事情还不够清晰,请告诉我,我将尝试使其更加清晰。 用户已经输入了名为的设置列表。有了这些,我正在寻找产品。一切顺利,直到他应该挑选出最佳比赛。 有几个字段,例如。 我要订购。例如,他需要先订购带有的产品,然后再订购。您可以使用来做到这一点,但是我希望不安静匹配的结果也只显示在列表的底部。因此,基本上

  • 如何创建高效的 JPA 条件查询,以便仅当实体存在于联接表中时才选择实体列表?例如,采用以下三个表: 有问题的查询(我希望 JPA 生成什么)是: 以下条件查询将产生类似的结果,但有两个连接: 根本问题似乎是我对USER_WORKGROUP连接表使用@JoinTable注释,而不是对连接表使用单独的@Entity,所以我似乎不能在条件查询中将USER_WORGGroup用作根。 以下是实体类:

  • 显然,扩展了,是抽象的,继承是, 和 具有 其他原因 。 但生成的SQL是这样的: 在我期待的时候: 请注意 使用另一根- 使用子查询- 将lastName字段上移到主题 使用本机查询 使用实体图 是不能接受的。 我感兴趣的是可以在WHERE子句中直接声明和使用的东西(仅从CriteriaBuilder和/或单个Root生成,就像子句一样)(如果确实存在的话)。

  • v3.0开始,herosphp 提供了一套全新的设置查询条件的接口: MysqlModel::where($field, $opt, $value); 参数名称 参数类型 参数说明 $field string OR function 字段名称, 如果传入的是 function 的话,则说明是闭包. 闭包传入的是一组查询条件。 $opt string 操作符,如果不传入 $value 的情况下,$o