Hibernate 条件 MAX of SUM
Hibernate criteria MAX of SUM
我怎样才能用标准 (JAVA)
实现这个 HQL
"SELECT MAX(pointsum) FROM (SELECT SUM(h.point) as pointsum FROM HealthPoint h WHERE h.player.partner = :partner GROUP BY h.player)"
我已经测试了这个但是我知道了但是我得到了 属性 pointsum
not found
DetachedCriteria detachedPlayer = DetachedCriteria.forClass(Player.class);
detachedPlayer.add(Restrictions.eq("partner", partner));
detachedPlayer.setProjection(Projections.property("id"));
Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(HealthPoint.class);
criteria.add(Subqueries.propertyIn("player", detachedPlayer));
ProjectionList proj = Projections.projectionList();
proj.add(Projections.sum("point"));
proj.add(Projections.groupProperty("player"));
criteria.setProjection(Projections.alias(proj, "pointsum"));
criteria.setProjection(Projections.max("pointsum"));
return (Integer) criteria.uniqueResult();
提前致谢!
hql 不支持
在 hql 中可能无法使用 from 子句中的子查询。
见 https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/queryhql-subqueries.html
Note that HQL subqueries may occur only in the select or where
clauses.
其他选项
我有两个建议来解决这个问题:排序和限制结果,或者创建一个视图。
将结果限制为您想要的结果:
.createQuery("SELECT SUM(h.point) as pointsum FROM HealthPoint h WHERE h.player.partner = :partner GROUP BY h.player order by pointsum desc")
.limit(1);
在数据库中创建一个视图,然后 select 从中创建
create view HealthPointSumsByPlayer
as
select sum(point), player_id
from Health_Points
group by player_id;
然后 select(通过 hql)从那开始。
我怎样才能用标准 (JAVA)
实现这个 HQL"SELECT MAX(pointsum) FROM (SELECT SUM(h.point) as pointsum FROM HealthPoint h WHERE h.player.partner = :partner GROUP BY h.player)"
我已经测试了这个但是我知道了但是我得到了 属性 pointsum
not found
DetachedCriteria detachedPlayer = DetachedCriteria.forClass(Player.class);
detachedPlayer.add(Restrictions.eq("partner", partner));
detachedPlayer.setProjection(Projections.property("id"));
Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(HealthPoint.class);
criteria.add(Subqueries.propertyIn("player", detachedPlayer));
ProjectionList proj = Projections.projectionList();
proj.add(Projections.sum("point"));
proj.add(Projections.groupProperty("player"));
criteria.setProjection(Projections.alias(proj, "pointsum"));
criteria.setProjection(Projections.max("pointsum"));
return (Integer) criteria.uniqueResult();
提前致谢!
hql 不支持
在 hql 中可能无法使用 from 子句中的子查询。 见 https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/queryhql-subqueries.html
Note that HQL subqueries may occur only in the select or where clauses.
其他选项
我有两个建议来解决这个问题:排序和限制结果,或者创建一个视图。
将结果限制为您想要的结果:
.createQuery("SELECT SUM(h.point) as pointsum FROM HealthPoint h WHERE h.player.partner = :partner GROUP BY h.player order by pointsum desc") .limit(1);
在数据库中创建一个视图,然后 select 从中创建
create view HealthPointSumsByPlayer as select sum(point), player_id from Health_Points group by player_id;
然后 select(通过 hql)从那开始。