【问题标题】:Spring Data JPA Repositories: Is it possible to give the params a default Value / default all?Spring Data JPA Repositories:是否可以为参数提供默认值/默认全部?
【发布时间】:2014-11-03 23:14:58
【问题描述】:

所以,简而言之:是否可以在 Spring Data JPA(可能是 @Query-Annotated)Repository-Methods 中将参数设置为“默认:全部”或更一般地设置为默认特定值?

我是aware,可以在(Rest)控制器中设置默认值,我只是好奇是否也可以在存储库级别进行设置。我认为这可能是一个不错的功能,因为“给我一些过滤的结果集,其中过滤器可能没有通过休息调用在前端设置”是一个非常常见的用例。

示例查询:

@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);

因此,假设未设置街道,存储库应使用“%”返回其他条件匹配但街道不相关的所有结果。

【问题讨论】:

  • 恕我直言,那会变得一团糟。相反,您可能最好使用构造动态查询的Specification(这就是您基本上想要的)。另见spring.io/blog/2011/04/26/…
  • 听起来像是一个可行的解决方案,到目前为止谢谢 :) 我只是想到了特别常见的用例“如果没有定义值,则回退以选择所有内容”,会有一种“更简单的方法来做这个”。在这里有一些简单的东西会很棒,考虑其他具有过滤器值列表的查询,例如where e.group IN ?3(您不能在此处使用“%”)。但是,到目前为止,谢谢。如果需要,请根据您的评论创建答案。我仍然会等待其他答案,但如前所述,它是一个可行的解决方案:-)

标签: java spring orm spring-data-jpa


【解决方案1】:

在@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 这样的自定义参数注释,但我相信这需要自定义存储库实现本身。

另一种选择是 M. Deinum 提到的 Specification。

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2015-07-31
    • 2022-01-08
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2014-11-03
    • 2020-05-04
    相关资源
    最近更新 更多