java - 具有计数条件的 Hibernate 条件

标签 java hibernate hibernate-criteria

我需要相当于

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);

在 Hibernate 标准中。感谢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,但我如何才能引用计数?

有没有办法在查询中引用生成的元组元素?

最佳答案

Hibernate Criteria API 不支持 HAVING 子句。由于它在较新的 Hibernate 版本中已被弃用,我建议您转向 JPA Criteria API,或使用 HQL/JPQL 或更高级的包装器,如 Querydsl JPA .

关于java - 具有计数条件的 Hibernate 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198056/

相关文章:

java - org.apache.poi 中的异常

java - 如何使用方法解决: Locking account after three times?

sql - Grails顺序不起作用

java - Spring Boot 2.0.0.RELEASE迁移后"Got different size of tuples and aliases"异常

java - 如何在 Hibernate 中访问标准中的 Object.field

java - ConnectionShutdownException 是什么意思以及如何防止它?

java - 使 JNLP Web-Start applet 可调整大小

java - JPQL IS NOT NULL 返回带有 NULL 的对象

hibernate - 使用 Hibernate 标准和 FetchMode.JOIN 进行分页

java - 如何将谓词列表添加到 CriteriaBuilder.or