Java JPQL选择所有对象,但在对象集合上选择setMaxResult
我有3个实体: 已设置库的用户。 已设置照片的画廊 现在我想选择所有用户的最后3张照片由创建时间用户可能有10个画廊和100张照片为每个画廊。我如何做jpql 我不知道如何获取前3张照片从下面的p中选择前3张: Query q=em.createQueryselect u,从用户u left join u.g left join g.photos p中的p中选择前3名 我知道我只能通过以下方式获得一个拥有前3张照片的用户: Query q=em.createQueryselect u,p from User u left join u.g left join g.photos p其中u.id=:userId.setMaxResults3 但是一个jpql中的所有用户呢Java JPQL选择所有对象,但在对象集合上选择setMaxResult,java,hibernate,orm,jpql,Java,Hibernate,Orm,Jpql,我有3个实体: 已设置库的用户。 已设置照片的画廊 现在我想选择所有用户的最后3张照片由创建时间用户可能有10个画廊和100张照片为每个画廊。我如何做jpql 我不知道如何获取前3张照片从下面的p中选择前3张: Query q=em.createQueryselect u,从用户u left join u.g left join g.photos p中的p中选择前3名 我知道我只能通过以下方式获得一个拥有前3张照片的用户: Query q=em.createQueryselect u,p fro
提前感谢。如果您正在使用PostgreSQL,您可以使用窗口功能按用户选择前3个photo.id:
List<Long> photoIds = (List<Long>)
em.createNativeQuery(
"select data.p_id
from
(
SELECT p.id as p_id, row_number() as rw OVER w as rw
FROM photo p
INNER JOIN galley g on g.id = p.galery_id
INNER JOIN user u on u.id = g.user_id
WINDOW w AS (PARTITION BY u.id ORDER BY p.creation_time DESC)
) data
where rw <= 3", Long.class)
.getResultList();
然后使用这些ID,您可以获取照片/图库/用户:
List<Photo> photos = (List<Photo>)
em.createQuery(
"select p
from Photo p
join fetch p.gallery g
join fetch g.user u
where p.id in (:photoIds)")
.setParameter("photoIds", photoIds)
.getResultList();
然后,您可以从照片列表中重新创建用户/图库/照片
没有其他方法可以使用JPQL仅选择子实体的合并集合的部分视图。如何通过上载时间或创建时间知道最后3张照片?您不了解哪一部分、合并、排序或限制?请使用最后3张照片的创建时间更新您的问题,代码和结果都是您迄今为止尝试过的!我明白你的方法。从多个方面进行查询,而不是从一个方面进行查询。好主意谢谢