簡體   English   中英

如何使用標准 Api 創建子查詢

[英]How to create a subquery using criteria Api

我嘗試按照標准 Api 執行以下 JPQL 條款

 SELECT new ProductDTOOut(p.id,p.name, 
    (SELECT pr.price FROM Price pr WHERE pr.product.id = p.id and pr.company.id = :companyId) ) 
    FROM Product p 

沒有成功,我該怎么辦?

tnx 高級

我知道解決我的問題按照答案:

CriteriaBuilder cb = manager.getCriteriaBuilder();
CriteriaQuery<ProductDTOOut> criteriaQuery = cb.createQuery(ProductDTOOut.class);

// create query 
Root<Product> rootFrom = criteriaQuery.from(Product.class);

// creating subquery   
Subquery<Double> subquery = criteriaQuery.subquery(Double.class);
Root<Price>  subqueryRoot  = subquery.from(Price.class);
subquery.select(subqueryRoot.get(Price_.PRICE));

subquery.where(
 cb.equal(rootFrom.get(Product_.ID), 
   subqueryRoot.get(Price_.PRODUCT).get(Product_.ID)),
 cb.equal(
   subqueryRoot.get(Price_.COMPANY).get(Company_.ID), companyId));      


criteriaQuery.select(cb.construct(ProductDTOOut.class, 
        rootFrom.get(Product_.ID),
        rootFrom.get(Product_.NAME),
        subquery // here put subquery 
        ));

TypedQuery<ProductDTOOut> query = manager.createQuery(criteriaQuery);

return query.getResultList();

我希望我能幫助有同樣問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM