查询方法中的Spring Data可选参数

新手上路,请多包涵

我想在存储库层编写一些查询方法。此方法必须忽略空参数。例如:

 List<Foo> findByBarAndGoo(Bar barParam, @optional Goo gooParam);

此方法必须按此条件返回 Foo:

 bar == barParam && goo == gooParam;

如果 gooParam 不为空。如果 gooParam 为空,则条件更改为:

 bar == barParam;

有什么解决办法吗?有人能帮我吗?

原文由 mohammad_1m2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 914
2 个回答

来不及回答。不确定 BarGoo 之间的关系。检查 示例 是否可以帮助您。

它对我有用。我有类似的情况,实体 用户 有一组属性,并且有 findAll 方法可以根据属性(可选)搜索用户。

例子,

   Class User{
    String firstName;
    String lastName;
    String id;
  }

  Class UserService{
     // All are optional
     List<User> findBy(String firstName, String lastName, String id){
        User u = new User();
        u.setFirstName(firstName);
        u.setLastName(lastName);
        u.setId(id);

        userRepository.findAll(Example.of(user));
        // userRepository is a JpaRepository class
     }
  }

原文由 Shaunak Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

我不相信您能够使用查询定义的方法名称方法来做到这一点。从文档( 参考):

尽管从方法名派生查询非常方便,但可能会遇到这样的情况,即方法名解析器不支持要使用的关键字,或者方法名会变得不必要地丑陋。因此,您可以通过命名约定使用 JPA 命名查询(有关更多信息,请参阅使用 JPA NamedQueries)或者使用 @Query 注释您的查询方法

我认为你这里有这种情况,所以下面的答案使用 @Query 注释方法,这几乎和方法名称方法一样方便( 参考)。

     @Query("select foo from Foo foo where foo.bar = :bar and "
        + "(:goo is null or foo.goo = :goo)")
    public List<Foo> findByBarAndOptionalGoo(
        @Param("bar") Bar bar,
        @Param("goo") Goo goo);

原文由 chaserb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题