我有这些课程:
@Entity
public class Customer {
@Id long id;
String name;
@OneToMany List<Customer> related;
}
我正在使用这个JPQL查询:
select c from Customer c where c.name = 'ACME'
or exists( select 1 from c.related r where r.name = 'ACME' )
如何使用Criteria API编写相同的查询?我需要将exists
与子查询一起使用,例如JPQL,但我不知道如何从Criteria API中的集合属性创建子查询。
答案 0 :(得分:0)
这样的事情会给EXISTS (subquery)
Subquery<Long> sq = cq.subquery(Long.class);
Root<Customer> customerSub = sq.correlate(customer);
Join<Customer,Customer> related = customerSub.join(Customer_.related);
... extra config of subquery
Predicate existsCustomer = cb.exists(sq);
其中cq
是CriteriaQuery
,cb
是CriteriaBuilder
。这来自JPA 2.1规范p323示例4中的示例