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));
我有 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));