使用 JPQL/HQL 在 JPA 中订购连接获取的集合

Posted

技术标签:

【中文标题】使用 JPQL/HQL 在 JPA 中订购连接获取的集合【英文标题】:Ordering a join fetched collection in JPA using JPQL/HQL 【发布时间】:2011-08-19 17:07:35 【问题描述】:

鉴于下面的 JPQL 语句,我该如何修改它,以便结果列表中的小猫按其age 属性排序?

SELECT c FROM Cat c left join fetch c.kittens WHERE c.id = :id

我尝试了多种方法,但没有任何运气。这基本上是我想做的,但它不起作用:

SELECT c FROM Cat c left join fetch c.kittens k WHERE c.id = :id ORDER BY k.age

【问题讨论】:

【参考方案1】:

嘿嘿,

我认为使用查询应用时这是不可能的。但据我所知,您可以使用它在映射中为您的集合添加默认排序:

@OrderBy("myColumName asc")

【讨论】:

您可以在 doc:docs.oracle.com/javaee/7/api/javax/persistence/OrderBy.html中阅读更多关于用法的信息【参考方案2】:

除了@bigZee77 的回答之外,您还可以更改您的查询并查询小猫而不是猫。生成的小猫列表将被排序,每只小猫都会指向同一只猫:

select k from Cat c inner join fetch c.kittens k where c.id = :id order by k.age

如果猫没有小猫,你会得到一个空列表。

当然,另一种方法是提供一个对小猫列表进行排序的 Java 方法。

【讨论】:

【参考方案3】:

我正在检索具有相应时隙的时间间隔,并且能够使用 JPQL 查询中子集合的属性对记录进行排序。

以下对我有用。

SELECT DISTINCT i FROM Interval i INNER JOIN FETCH i.slots s WHERE i.schedulerId = :schedulerId ORDER BY s.startDateTime

【讨论】:

以上是关于使用 JPQL/HQL 在 JPA 中订购连接获取的集合的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate JPQL/HQL:聚合函数的错误显示错误的表/实体连接两次(仅使用 HSQLDB)的结果?

正确的表达式不是 JPQL/HQL 查询中的有效表达式

如何在 IntelliJ 12 中启用 HQL/JPQL 自动完成

条件查询,SQL,JPQL,HQL

这可能吗:JPA/Hibernate query with list property in result?

使用对象属性的 JPA 命名查询