从主记录访问基于列表的记录

时间:2011-01-05 12:28:10

标签: java database jpa

我有一个表 - 让我们称之为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中的第一个项目,并按顺序排序。为实现这一目标应该做些什么?

2 个答案:

答案 0 :(得分:1)

因此,您需要两个聚合bbbs - 一个用于确定大小,另一个用于查找最新时间戳。它可以用JOINGROUP 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)