gpt4 book ai didi

java - 使用 Criteria API 根据条件计算连接表的结果

转载 作者:行者123 更新时间:2023-12-02 10:48:35 25 4
gpt4 key购买 nike

我无法弄清楚什么看起来是最简单的事情,因为我在任何地方都找不到它。我找到了一些使用 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));

这就是我的选择方式,但是我如何计算链接到通过的报告的数据集的数量?我确实知道查询根肯定很长,但随后我的脑子里又乱了,我无法弄清楚所有这些对象如何一起工作并可以相互包装......

提前谢谢您!

最佳答案

解决方案:

You could achieve this by adding builder.count(resultSetRoot) inside your criteriaQuery.select and then get the count result back by em.createQuery(criteria).getSingleResult();, here is the complete part:

<小时/>

源代码:

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();
<小时/>

更多信息:

关于java - 使用 Criteria API 根据条件计算连接表的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52362104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com