如何使用条件 Api 创建子查询
Posted
技术标签:
【中文标题】如何使用条件 Api 创建子查询【英文标题】:How to create a subquery using criteria 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 高级
【问题讨论】:
【参考方案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();
我希望我能帮助有同样问题的人。
【讨论】:
以上是关于如何使用条件 Api 创建子查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 web api 发布/创建子实体对象时如何设置父实体 ID