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
(也许这就是标准查询应该生成的内容)。需要检查一下。
现在我扪心自问,是不是有什么“点符号”或者其他什么东西让这个案例变得可有可无。在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