2014-09-10 136 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提及。