2012-11-20 222 views
5

我是Spring數據JPA的新手,並試圖瞭解如何在QueryDSL中最好地使用它。如果沒有QueryDSL,我可以通過@Query註釋簡單地在我的SpringData接口中創建任何查詢。Spring Data JPA和QueryDSL

爲了使用QueryDSL具有相同的體驗,我可以看到,我需要創建自己的自定義存儲庫實現,並讓我的存儲庫接口擴展自定義實現接口或將所有QueryDSL查詢放在服務層包裝我的回購。

在第一種情況下,我無法使用任何SD自動生成的方法(例如:findAll(QueryDSL謂詞)),因爲我無法訪問實際的回購對象,並且在第二種情況我將查詢邏輯放在服務層而不是回購層上。

這兩種解決方案對我來說都不是特別吸引人。有沒有第三種方法更合適?或者我誤解了如何正確使用QueryDSL和Spring Data?

謝謝!

埃裏克

回答

10

可能是最方便的方法就是讓你的資料庫界面簡單地擴展QueryDslPredicateExecutor這增加的能力,只是管Querydsl Predicate對象到庫中並執行獨立或一起PageableSort等。

如果您確實想將謂詞組合隱藏到存儲庫層(這絕對很好但實際上服務於不同目的),您可以創建一個單獨的存儲庫實現類,如here所述,並使用QueryDslRepositorySupport作爲基類。在實現的查找方法中,您可以使用基類的from(…),update(…)delete(…)方法輕鬆地使用Querydsl元模型構建和執行查詢。

+0

這個問題不是'將謂詞組合到隱藏庫中',對我而言,它是關於在我的查詢中添加'group by ...並且執行它們,只有謂詞似乎並不近似於 – azerafati

+0

,「QueryDslPredicateExecutor」不允許使用'groupBy'等。只有查詢的where部分。這通常是不夠的。但是以QueryDslRepositorySupport'爲基類的定製存儲庫impl非常好! – djxak

+0

@azerafati,看看https://github.com/infobip/infobip-spring-data-jpa-querydsl,它可能是你在找什麼。 – lpandzic

相關問題