首页 文章

JPA 2 Criteria API,儿童计数标准

提问于
浏览
3

我试图实现类似的东西:

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

Question: 如何使用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 children count criteria
2.描述该主题的另一个有用的线程:JPA CriteriaBuilder - sort by the number of associated entities in a one-to-many relationship

1 回答

  • 3

    好的,我自己找到了解决方案 . 希望它可以帮助别人:)

    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();
    

相关问题