JPA 为每个项目选择最新实例
假设我有一个会议实体。每个会议都有一个与会者和一个会议日期。在我的会议表中,我可能为每个与会者设置多个会议,每个会议的日期不同。我需要一个 JPA 查询,该查询将仅为所有与会者选择最新的会议。例如,如果我的表看起来像这样
Meeting ID | Attendee ID | Meeting Date
1 | 1 | 6/1/2011
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
我的结果应该是
Meeting ID | Attendee ID | Meeting Date
2 | 2 | 6/1/2011
3 | 1 | 6/6/2011
4 | 3 | 6/6/2011
使用 JPA 2 对抗 postgres。会议有 1-1 到与会者和一个简单的时间戳日期。我怀疑我需要做一个小组和max(blah),也许可以加入自己,但我不确定解决这个问题的最佳方法。
更新:在花了一整晚的时间玩这个之后,我仍然没有一个可接受的JPQL解决方案。以下是我到目前为止所拥有的:
select m from Meeting m
where m.meetingDate in
( select max(meet.meetingDate)
from Meeting meet group by meet.attendee )
我有各种与这个问题无关的其他条件,例如按与会者部门过滤等等。这有效的唯一原因是,我们将会议日期跟踪到第二个(或更精细),并且在同一时间有两个会议的可能性很小。我们正在围绕它放置一些java的东西,以便只保留每个与会者的最后一次会议,以防万一我们同时得到两个,但这是一个非常糟糕的解决方案。在查询中获取所有内容确实不应该太困难,但我还没有弄清楚。
更新2:添加sql标签,因为如果我需要使用sql来创建视图并创建一个JPA对象来映射到视图,我对此感到满意。