【问题标题】:How to create a subquery using criteria Api如何使用条件 Api 创建子查询
【发布时间】:2021-07-29 02:06:25
【问题描述】:

我尝试对标准 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 高级

【问题讨论】:

    标签: java jpa spring-data-jpa jpql criteria-api


    【解决方案1】:

    我知道按照答案解决我的问题:

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

    我希望我能帮助有同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2015-10-07
      • 1970-01-01
      • 2021-07-14
      • 2020-08-27
      相关资源
      最近更新 更多