【问题标题】:Count Max with criteria in JPQL使用 JPQL 中的条件计算 Max
【发布时间】:2015-10-26 05:14:32
【问题描述】:

您好,我有一个 OneToMany 关联(用户---会员), 我需要找到具有更多会员资格的用户,其属性 Membership.status 等于“接受”。

我是这样想的:

@Query("select u from User u join u.memberships m where count(m) = "
        + "(select max(count(m1)) from User u1 join u1.memberships m1 where m1.status ="
        + " 'ACCEPTED') and m.status = 'ACCEPTED'")

控制台打印:

2015-10-26 16:45:13,514 [main] WARN  org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - SQL Error: 1111, SQLState: HY000
2015-10-26 16:45:13,514 [main] WARN  org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - SQL Error: 1111, SQLState: HY000
org.hibernate.exception.GenericJDBCException: could not extract ResultSet
2015-10-26 16:45:13,514 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - Invalid use of group function
2015-10-26 16:45:13,514 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - Invalid use of group function

你能帮我解决这个问题吗?谢谢。

【问题讨论】:

  • 以及完整的异常、堆栈跟踪、JPA 实现调用的 SQL?
  • 我没有说,因为只是说我不知道​​做这个查询。

标签: hibernate jpa count jpql


【解决方案1】:

更新:
尝试使用此查询:

SELECT u FROM user u
LEFT JOIN FETCH u.memberships  m
WHERE m.status = 'ACCEPTED'
AND u.memberships.size = (SELECT max(u1.memberships.size) FROM user u1) 

【讨论】:

  • 这可行,但不是我问的。同一用户的所有会员资格不具有“接受”状态,因此,当您致电 u.memberships.size = (select ....) 时,您考虑到所有 u.memberships 都具有相同的状态。而status是Membership的一个属性,不能u1.status
  • 没有按预期工作,此查询提取成员资格的最大大小,但未考虑条件(m.status = 'ACCEPTED')。谢谢我最接近的,它与关系相反:从成员资格 m 中选择不同的 m.student 其中 m.status = 'ACCEPTED' group by m.student) order by count(m);这给了我一个有序数组,我只需要在顶部搜索。
  • 谢谢大家,如果您找到确切的查询,请给我评论。 :)
猜你喜欢
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多