Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPQL选择所有对象,但在对象集合上选择setMaxResult_Java_Hibernate_Orm_Jpql - Fatal编程技术网

Java JPQL选择所有对象,但在对象集合上选择setMaxResult

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

我有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中的所有用户呢


提前感谢。

如果您正在使用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张照片的创建时间更新您的问题,代码和结果都是您迄今为止尝试过的!我明白你的方法。从多个方面进行查询,而不是从一个方面进行查询。好主意谢谢