2016-06-10 2 views
0

Таким образом, запрос ниже, вероятно, не самый эффективный, купите еще, мне интересно, почему он не возвращает никакого результата, даже если аналогий SQL. Нет ошибки, я просто не получаю никакого результата. Возможно, это не правильный эквивалент для запроса, который я написал в MySQL?JPA Query with GROUP BY, HAVING и COUNT

Это JPA JPQL.

Query query = em.createQuery("SELECT sub FROM Subscription sub WHERE " 
       + "sub.isSuspended = 0 AND " 
       + "(SELECT i FROM Invoice i WHERE i.dateDue < CURRENT_DATE AND i.datePaid IS NULL " 
       + "GROUP BY i HAVING COUNT(i.idInvoice) > 2) MEMBER OF sub.invoices"); 

И это SQL от MySQL.

SELECT * from subscription 
WHERE subscription.is_suspended = 0 AND id_subscription IN 
    (SELECT id_subscription FROM invoice 
    WHERE date_due < CURDATE() AND date_paid IS NULL 
    GROUP BY id_subscription 
    HAVING COUNT(*) > 2) 

ответ

1

Два запроса не совпадают. Для использования фактического запроса используйте NativeQuerycreateNativeQuery() вместо запроса.

В вашем случае версия JPA, похоже, имеет синтаксические ошибки.

  1. После И у вас отсутствует оператор IN.
  2. В вложенном запросе вы выбираете i вместо чего-то вроде i.idInvoice

Запрос JPA должен выглядеть

SELECT sub FROM Subscription sub WHERE sub.isSuspended = 0 AND 
sub.idSubscription IN (SELECT i.idInvoice FROM Invoice i WHERE 
i.dateDue < CURRENT_DATE AND i.datePaid IS NULL GROUP BY i.idInvoice 
HAVING COUNT(i.idInvoice) > 2); 
+0

Я попытался с помощью запроса JPA вы предоставили, но без успеха, до сих пор нет результата , Но мне удалось сделать то, что я хотел, используя созданный вами createNativeQuery(). Спасибо за ваш ответ, очень ценим! – user2997695

Смежные вопросы