【发布时间】:2017-12-25 04:01:33
【问题描述】:
我需要相当于
SELECT m.id, count(i.id)
FROM master m LEFT JOIN item i on m.id = i.master_id
GROUP BY m.id, m.size
HAVING m.size <> count(i.id);
在休眠标准中。感谢this question,我知道如何将分组结果作为Object[] 的列表获取:
ProjectionList projList = Projections.projectionList();
projList.add(Projections.groupProperty("master"));
projList.add(Projections.count("id"));
session
.createCriteria(Item.class)
.join("master")
.setProjection(projList)
.addRestriction(???) // <- my HAVING clause
.list();
我不知道如何添加 HAVING 子句。我猜应该是Restrictions.eqProperty 之类的东西,但是我怎么能引用计数呢?
有没有办法在查询中引用结果元组元素?
【问题讨论】:
-
m.size 怎么能在你的having子句中而不在group by子句中?
-
@jpprade 这是 MySQL。 :D MySQL 在这方面相当草率,我忘了打开严格模式。另一件事是
id是 PK,在 GROUP BY 中提及size是多余的(从逻辑上讲,不是根据 SQL)。
标签: java hibernate hibernate-criteria