2014-04-11 68 views
11

我想建立一個使用彈簧數據的動態查詢,基本上我有一堆特性的數組,我需要組裝基於這些特性的查詢,幾乎像「WHERE特性= A AND特性= B AND特性= C「,但特性量可能會有所不同。春季數據動態查詢

我注意到我可以使用@Query註釋,但可以使@Query的可分頁結果成爲可能嗎?

有沒有其他辦法可以做到這一點?

Page<Recipe> findDistinctByNameContainingAndOrganizationAndCharacteristicsInOrIngredientsContainingAndOrganizationAndCharacteristicsInOrDescriptionContainingAndOrganizationAndCharacteristicsInAllIgnoreCase(
     String name, Organization organization1, List<Characteristic> characteristic1, 
     String ingredients, Organization organization2, List<Characteristic> characteristic2, 
     String description, Organization organization3, List<Characteristic> characteristic3, 
     Pageable pageable); 
+0

是@查詢支持Pageable –

+1

嘗試使用QueryDSL。例如,在這種情況下,您可以發送任何謂詞給您的存儲庫或服務。 http://www.querydsl.com/ –

+0

對於像這樣的方法聲明,我一定會考慮像'@ Query'和Querydsl等其他選項。由於其長名稱和參數列表,此方法實際上無法使用。 –

回答

9

是的。 @Query支持可分頁..是的,還有另一種方法來實現這一點。

您可以看看使用條件構建查詢,這允許您在條件動態添加AND/OR。我實際上使用querydsl來促進我的發展。

在這篇文章中,你可以找到展臺的一個很好的解釋:http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Altough它可能是似乎在開始越來越複雜,使用此功能將會使你的代碼日益增長的複雜性更一致