Настройка предложения JPA CriteriaQuery

Есть ли способ еще больше ограничить объединение, добавив несколько выражений? С простым 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

Я не нашел способ реализовать это с помощью JPA 2.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.

Другие вопросы по тегам