计算 Hibernate JPA 中子查询返回的行数

Posted

技术标签:

【中文标题】计算 Hibernate JPA 中子查询返回的行数【英文标题】:Count number of rows returned by a sub query in Hibernate JPA 【发布时间】:2021-02-01 12:34:06 【问题描述】:

我想在 Hibernate JPA 中执行以下查询。

select distinct count(*)
from (
         select distinct entity1.CODE                              as col_0_0_,
                         string_agg(entity2.PRODUCT_IMAGE_URL, ',') as col_1_0_,
                         count(entity1.CODE)                       as col_2_0_
         from entity1
                  inner join entity2 on entity1.id = entity2.entity1_ID                 
         where entity1.id = 1           
         group by entity1.CODE
     ) as cnt;

知道如何使用 Criteria API 做到这一点吗?

【问题讨论】:

您可以添加示例实体以获取更多详细信息和关系 【参考方案1】:

您将需要以下内容:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = cb.createQuery(Long.class);
Root<Entity1> root = criteriaQuery.from(MyEntity.class);
criteriaQuery.select(criteriaBuilder.countDistinct(entityRoot.get("code")));
Long count = entityManager.createQuery(criteriaQuery).getSingleResult();

【讨论】:

是的,但我有一个子查询要执行,然后计算结果返回的行数。 当然,但是您展示的示例不需要子查询。本质上,您只需计算不同的代码。如果您必须使用子查询,那么您将无法使用普通的 JPA 标准。您可以查看 Blaze-Persistence,尽管它提供了一种生成计数查询的方法:persistence.blazebit.com/documentation/1.5/core/manual/en_US/…

以上是关于计算 Hibernate JPA 中子查询返回的行数的主要内容,如果未能解决你的问题,请参考以下文章

在选择期间休眠重复的行

使用名为查询的数据 jpa 返回具有不同列值的行

Java Hibernate 计数行

如何在 JPA 和 Hibernate 中返回所有值

JPA Hibernate 调用 Postgres 函数 Void 返回 MappingException:

hibernate getResultList() 返回不同的数据