JPA 条件,其中计数 > 0

JPA criteria, where count > 0

我有 2 个表:

客户有一个 OneToMany 关联,用于列出发票。

我想使用 CriteriaBuilder 创建这个 select:

select 
   ... 
from 
  Client c 
where 
  (select count(1) from Invoice i where i.id = c.invoiceId) > 0

我该怎么做?

JPQL 你可以使用 :

Query query = em.createQuery
 ("SELECT c FROM Client c WHERE (SELECT COUNT(i) FROM Invoice i WHERE i.client= c) > 0");
List<Client> clientc=query.getResultList());

但是 Criteria API 因为你在 where clause 中使用 subquery 你需要像下面这样的东西(也许这不是你想要的我不确定因为没有测试我随便写的):

CriteriaBuilder cb = em.getCriteriaBuilder();  
CriteriaQuery<Client> q = cb.createQuery(Client.class); 
Root<Client> client =  q.from(Client.class); 
q.select(client);

Subquery<Invoice> sq= q.subquery(Invoice.class); 
Root<Invoice> invoice= sq.from(Invoice.class);  
sq.select(invoice);

Predicate sqp = cb.equal(client.get("id"), invoice.get("invoiceId"));
sq.where(sqp);
q.where(cb.exists(sq));