mysql - 如何在hibernate中使用Having和group By子句?

标签 mysql sql hibernate criteria

我有一个类似这样的sql查询。

SELECT VERSION_ID FROM VIEWTEST
where ( item_id='I001' and value ='V001')
or  ( item_id='I002' and value ='V002')
or ( item_id= 'I003'and value ='V003')
group by VERSION_ID
having count(1) = 3

我的 ViewTest 实体是这样的。

@Column(name = "version_id")
    private String versionId;

@Column(name = "item_id")
    private String itemId;

@Column(name = "value")
    private String  value;

这是我编写的 Crieteria 查询。

 CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
         CriteriaQuery<String> query = criteriaBuilder.createQuery(String.class);
         Root<ViewTest> testRoot = query.from(ViewTest.class);
         List<Predicate> predicates = new ArrayList<Predicate>();
         Predicate p1 = criteriaBuilder.equal(testRoot.get("itemId"), "I001");
         Predicate p2 = criteriaBuilder.equal(testRoot.get("itemId"), "I002");
         Predicate p3 = criteriaBuilder.equal(testRoot.get("itemId"), "I003");

         Predicate v1 = criteriaBuilder.equal(testRoot.get("value"), "V001");
         Predicate v2 = criteriaBuilder.equal(testRoot.get("value"), "V002");
         Predicate v3 = criteriaBuilder.equal(testRoot.get("value"), "V003");
         predicates.add(criteriaBuilder.and(p1 , v1));
         predicates.add(criteriaBuilder.and(p2 , v2));
         predicates.add(criteriaBuilder.and(p3 , v3));

现在我不知道如何将 group By 和having 子句添加到此条件中。

有人可以帮我吗?

找到了更好的方法。

刚刚将以下内容添加到我的代码中。

query.groupBy(testRoot.<String> get("versionId"));
query.having(criteriaBuilder.in(criteriaBuilder.count(testRoot.get("versionId"))).value(
        queryCount));

这成功了。

最佳答案

您看过投影吗? Hibernate developer guide: Projections

示例:

List results = session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
    .add( Projections.rowCount() )
    .add( Projections.avg("weight") )
    .add( Projections.max("weight") )
    .add( Projections.groupProperty("color") )
)
.list();

关于mysql - 如何在hibernate中使用Having和group By子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766463/

相关文章:

MySQL - 每种类型值的总计

sql - Hive 外部表由逗号分隔,但数据中存在逗号

hibernate - 带有JPA API的Hibernate ResultTransformer

mysql - "SELECT ... FOR UPDATE"不适用于 Hibernate 和 MySQL

mysql - 关于mysql percona审计插件的用户过滤

MySQL结合3个选择查询的结果

mysql - MySQL中是否存在不能存储在字段中的非法字符?

sql - 在 sql server 中按特定月份的周分组

java - Spring、Hibernate 检查我的 Maven Shade JAR 中的每个 jar

python - 使用 Python 的 MySQL 加载数据 infile 不起作用