使用JPQL / HQL在JPA中对连接提取的集合进行排序

时间:2011-05-05 20:38:18

标签: java jpa hql jpql

鉴于以下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

3 个答案:

答案 0 :(得分:10)

HeJ小鼠,

使用查询时,我认为这不可行。但据我记忆,你可以使用它在映射中为你的集合添加默认排序:

@OrderBy("myColumName asc")

答案 1 :(得分:4)

除了@ bigZee77的答案之外,您还可以更改您的查询和查询小猫而不是猫。由此产生的小猫名单将被订购,每只小猫都会指向同一只猫:

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

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

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

答案 2 :(得分:0)

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

以下对我有用。

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