如何在 Criteria API 中的集合属性上编写 EXISTS 谓词?
How can I write an EXISTS predicate on a collection attribute in Criteria API?
我有这些 类:
@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' )
如何使用条件 API 编写相同的查询?我需要将 exists
与子查询一起使用,例如 JPQL,但我不知道如何从 Criteria API.
中的集合属性创建子查询
这样的事情会给 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
中的示例
我有这些 类:
@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' )
如何使用条件 API 编写相同的查询?我需要将 exists
与子查询一起使用,例如 JPQL,但我不知道如何从 Criteria API.
这样的事情会给 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