2014-09-10 59 views
5

因此,簡而言之:是否可以在Spring Data JPA(可能是@ Query-Annotated)Repository-Methods中將參數設置爲「default:All」或更一般地設置爲默認特定值?Spring Data JPA Repositories:是否可以給params一個默認值/默認全部?

我是aware它可能在(其他)控制器中設置默認值,我只是好奇它是否可以在存儲庫級別執行。我認爲這可能是一個很好的功能,因爲「給我一些過濾結果集,其中過濾器可能沒有通過休息呼叫設置在前端」是一個非常常見的用例。

示例查詢:

@Query("select new com.my.dto(e.name, e.age, e.address)" + 
     " from Entity e" + 
     "where e.name like ?1 " + 
     "and e.age like ?2 " + 
     "and e.street like ?3") 
List<Item> findItemsFiltered(String name, String age, String street); 

所以,當我們說街道沒有設置,系統信息庫應使用「%」返回在其他標準是匹配,但路邊沒有相關的所有結果。

+2

這會變得凌亂imho。相反,你可能更適合使用構造動態查詢的「規範」(這是你基本想要的)。另請參閱http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ – 2014-09-10 11:00:00

+0

您也可能想查看參考指南 - > http:// docs。 spring.io/spring-data/jpa/docs/current/reference/html/#specifications – 2014-09-10 11:05:50

+1

聽起來像一個可行的解決方案,感謝迄今:)我只是想特別是常見的用例「回退選擇一切,如果沒有價值定義「,那麼會有一個」更簡單的方法來做到這一點「。如果在這裏有一些容易理解的東西,想想其他查詢有一個filtervalue列表,比如'where suchroup IN?3'(你不能在這裏使用「%」)。但是,非常感謝迄今。如果你願意,請在評論中創建一個答案。我仍然會等待其他答案,但正如所說,它是一個可行的解決方案:-) – Dominik 2014-09-10 12:05:59

回答

0

如何在@Query本身做什麼呢? 喜歡的東西:

@Query("select new com.my.dto(e.name, e.age, e.address)" + 
    " from Entity e" + 
    "where e.name like ?1 " + 
    "and e.age like ?2 " + 
    "and e.street like (CASE WHEN ?3 IS NULL THEN '%' ELSE ?3 END)") 
List<Item> findItemsFiltered(String name, String age, String street); 

另一種方法是有一個自定義的參數註解像@Default但這需要自定義庫實現本身,我相信。

另一種替代方法是Specification爲M. Deinum提及。