我有一个表 - 让我们称之为AAA,它对附加表有一对多的定义,分配BBB。看起来像这样:
public class AAA
{
...
@OneToMany(orphanRemoval=true, fetch=FetchType.LAZY, mappedBy="aaa")
private List<BBB> bbbs;
...
}
我想运行一个JPA查询,它会给我所有拥有多个BBB的AAA,所以我使用了SIZE(aaa.bbbs)
。但是,我希望结果集按每个aaa中第一个bbb的时间戳排序。
一个现实生活中的例子:我希望得到我所有的Facebook朋友,按照每个添加到他们个人资料中的最新图片排序。在这种情况下AAA是“朋友”,BBB将是“图片”,我想通过Picture.CreatedTimestamp订购朋友。
我基本上需要访问每个aaa的bbbs中的第一个项目,并按顺序排序。为实现这一目标应该做些什么?
答案 0 :(得分:1)
因此,您需要两个聚合bbbs
- 一个用于确定大小,另一个用于查找最新时间戳。它可以用JOIN
和GROUP BY
表示:
SELECT a
FROM AAA a JOIN a.bbbs b
GROUP BY a.id, a.column1, a.column2
HAVING COUNT(b) > 1
ORDER BY MAX(b.timestamp) DESC
答案 1 :(得分:0)
如果你正在使用Hibernate,也许你可以使用过滤器(@Filter和@FilterDef)