2016-06-10 236 views
0

所以下面的查詢可能不是最有效的,仍然買,我想知道爲什麼它沒有返回任何結果,即使SQL對應的。沒有錯誤,我只是沒有結果。這可能不是我在MySQL中編寫的查詢的正確等價物嗎?JPA查詢與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"); 

這是MySQL的SQL。

​​

回答

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