[英]JPA 2 Criteria API, children count criteria
我试图实现类似的东西:
SELECT c.*, asCount.assetCount
FROM Company c
LEFT JOIN (
SELECT company_id, COUNT(*) as assetCount
FROM Asset
GROUP BY company_id) asCount
ON c.id = asCount.company_id
问题:我如何使用JPA 2 Criteria实现这一点?
我可以单独获取asCount结果,但不知道如何将其加入公司
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = builder.createTupleQuery();
Root<Asset> asset = cq.from(Asset.class);
cq.multiselect(asset.<Company>get("company").<Long>get("id").alias("id"), builder.count(asset).alias("assetCount"));
cq.groupBy( asset.<Company>get("company").<Long>get("id") );
Query query = em.createQuery(cq);
List<Tuple> results = query.getResultList();
提前致谢。
PS
1.有一个类似的线程要求孩子使用Hibernate API 计数 : Hibernate子计数标准
2.描述该主题的另一个有用的线程: JPA CriteriaBuilder - 按一对多关系中的关联实体的数量排序
好的,我自己找到了解决方案。 希望它可以帮助别人:)
CriteriaQuery<Tuple> cq = builder.createTupleQuery();
Root<Company> company = cq.from(Company.class);
Join<Company, Asset> secondTable = company.join("assets", JoinType.LEFT);
cq.multiselect(company.<String>get("id").alias("id"), builder.count(secondTable).alias("assetCount"));
cq.groupBy( company.<Long>get("id") );
Query query = em.createQuery(cq);
List<Tuple> results = query.getResultList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.