Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jpa 使用jpql获取集合中的最大元素数_Jpa_Max_Jpql_Named - Fatal编程技术网

Jpa 使用jpql获取集合中的最大元素数

Jpa 使用jpql获取集合中的最大元素数,jpa,max,jpql,named,Jpa,Max,Jpql,Named,我有以下两个实体(1:N): 及 我的第二个想法是在用户实体上编写命名查询: @NamedQuery( query="SELECT u.username FROM User u WHERE SIZE(u.jobs) = MAX ??????") 在这里,我也不知道如何获得最大分配工作的数量 有人能帮我吗?要按作业大小列出用户订单,可以使用以下JQL: from User order by jobs.size desc 它使用Hibernate和HSQLDB生成了以下SQL: select

我有以下两个实体(1:N):

我的第二个想法是在用户实体上编写命名查询:

@NamedQuery( query="SELECT u.username FROM User u WHERE SIZE(u.jobs) = MAX ??????")
在这里,我也不知道如何获得最大分配工作的数量


有人能帮我吗?

要按作业大小列出用户订单,可以使用以下JQL:

from User order by jobs.size desc
它使用Hibernate和HSQLDB生成了以下SQL:

select
    user0_.id as id0_ 
from
    User user0_ 
order by
    (select
        count(jobs1_.user_id) 
    from
        Job jobs1_ 
    where
        user0_.id=jobs1_.user_id) desc
要查找用户的最大作业大小,您可以使用为HSQLDB生成以下SQL的查询,将JPA限制为仅列出作业最多的顶级用户:

select
    user0_.id as id0_ 
from
    User user0_ 
order by
    (select
        count(jobs1_.user_id) 
    from
        Job jobs1_ 
    where
        user0_.id=jobs1_.user_id) desc limit ?

我发现一个类似于以下的查询成功地按用户拥有的作业数量降序向我提供了用户列表:

SELECT u FROM User u LEFT JOIN FETCH u.jobs 
ORDER BY u.jobs.size DESC
然后,如果您只获得第一个结果,那么您将获得具有最大作业数的用户。这就是你想要的吗

或者,要获取具有您可以使用的最大作业数的所有用户,请执行以下操作:

SELECT u FROM User u LEFT JOIN FETCH u.jobs 
WHERE u.jobs.size = (SELECT max(jobs.size) FROM User)
您可能不需要
左连接FETCH
部分

select
    user0_.id as id0_ 
from
    User user0_ 
order by
    (select
        count(jobs1_.user_id) 
    from
        Job jobs1_ 
    where
        user0_.id=jobs1_.user_id) desc limit ?
SELECT u FROM User u LEFT JOIN FETCH u.jobs 
ORDER BY u.jobs.size DESC
SELECT u FROM User u LEFT JOIN FETCH u.jobs 
WHERE u.jobs.size = (SELECT max(jobs.size) FROM User)