根据条件API使用条件加入表来计算结果

问题描述 投票:0回答:1

我无法弄清楚什么似乎是最简单的事情,因为我无法在任何地方找到它。我找到了一些关于使用count的例子,但我无法将它们放在我当前的代码中。

我们的想法是根据传递的id计算有多少实体链接到另一个实体。

代码如下:

   final EntityManager em = this.entityManager();
   final CriteriaBuilder builder = em.getCriteriaBuilder();
   final CriteriaQuery<Dataset> criteriaQuery = builder.createQuery(Dataset.class);
   final Root<Dataset> resultSetRoot = criteriaQuery.from(Dataset.class);
   final SetJoin<Dataset, Report> join = resultSetRoot.join(Dataset_.reports);
   criteriaQuery.select(resultSetRoot).where(builder.equal(join.get(Report_.id), reportId));

这就是我选择的方式,但我如何计算链接到传递报告的数据集数量?我知道查询根目录必须是Long然后,然后它再次在我脑海中搞砸了,我无法弄清楚所有这些对象如何协同工作并且可以相互包装......

先感谢您!

java jpa criteria-api
1个回答
1
投票

解:

您可以通过在builder.count(resultSetRoot)中添加criteriaQuery.select来实现这一点,然后通过em.createQuery(criteria).getSingleResult();获取计数结果,这是完整的部分:


源代码:

final EntityManager em = this.entityManager();
final CriteriaBuilder builder = em.getCriteriaBuilder();
final CriteriaQuery < Dataset > criteriaQuery = builder.createQuery(Dataset.class);
final Root < Dataset > resultSetRoot = criteriaQuery.from(Dataset.class);
final SetJoin < Dataset, Report > join = resultSetRoot.join(Dataset_.reports);

criteriaQuery.select(builder.count(resultSetRoot)).where(builder.equal(join.get(Report_.id), reportId));

Long count = em.createQuery(criteria).getSingleResult();

更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.