java定制JPA CriteriaQuery的onclause
有没有办法通过添加一些表达式来进一步限制联接?我用纯sql编写:
SELECT c.*, COUNT(i.id) invoice_count
FROM customers c
LEFT JOIN invoices i ON i.customer_id = c.id
AND i.creation_time >= '2012-01-01' -- <= extra restriction
AND i.creation_time < '2013-01-01' -- <= extra restriction
GROUP BY c.id
我还没有找到用JPA2.0 CriteriaQuery实现这一点的方法
更新:根据要求,我的(简化)代码(无额外限制):
CriteriaQuery<CustomerAndInvoiceCount> criteriaQuery = criteriaBuilder.createQuery(CustomerAndInvoiceCount.class);
Root<Customer> customer = criteriaQuery.from(Customer.class);
ListJoin<Customer, Invoice> invoices = customer.join(Customer_.invoices, JoinType.LEFT);
criteriaQuery.select(criteriaBuilder.construct(
CustomerAndInvoiceCount.class,
customer,
criteriaBuilder.count(invoices)));
criteriaQuery.groupBy(customer);
# 1 楼答案
您应该能够添加条件谓词,而不必担心它们是ON子句还是WHERE子句的一部分