我想要一个spring数据存储库接口,它采用两个参数。有没有办法使其具有以下行为?
MyObject findByParameterOneAndParameterTwo( String parameterOne, String parameterTwo);
如果这两个参数都有一个值,我希望它正常运行,并对这两个值执行“and”。
例如,如果第二个参数为null,则它将仅按ParameterOne进行搜索
有什么建议吗?
这里缺少的一个解决方案是Spring Data JPA的示例查询功能,它利用了ExampleMatcher#ignoreNullValues
,它的构建正是为了解决这个问题。不需要自定义查询和查询生成器。
此Spring数据查询:
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<MyObject> exampleQuery = Example.of(new MyObject("foo", null), matcher);
List<MyObject> results = repository.findAll(exampleQuery);
生成一个如下所示的查询:
select *
from myObject
where parameter1 = "foo"
同时:
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<MyObject> exampleQuery = Example.of(new MyObject("foo", "bar"), matcher);
List<MyObject> results = repository.findAll(exampleQuery);
产量:
select *
from myObject
where parameter1 = "foo"
and parameter2 = "bar"
很酷!
注意:您必须对存储库
界面做的一件事是添加QueryByExample
界面。您可以通过直接扩展QueryByExample
接口,或者通过JpaRepository
隐式扩展:
public interface MyObjectRepository extends JpaRepository<MyObject, Long> {}
我不确定是否可以使用存储库方法命名,但您可以使用@Query
,如
(:parameterOne is null or parameter1 = :parameterOne) and (:parameterTwo is null or parameter2 = :parameterTwo)
问题内容: 我想要一个带有两个参数的spring数据存储库接口。有没有办法使其具有以下行为? 如果两个参数都有一个值,我希望它正常运行并对两个值都执行“与”运算。 例如,如果第二个参数为null,则它将仅按ParameterOne搜索 有什么建议么? 问题答案: 我不知道这是可能的仓库方法命名,但你可以使用像
我目前正在开发我的项目的搜索和过滤功能。我正在尝试使用此请求主体检索数据: 下面是从ReasearchRepository检索此数据的方法: 我的问题是,当我试图从请求中的给定值中查找数据时,它返回一个空列表[],即使它存在于数据库中。我想要实现的是,如果参数为null,它将忽略查询中的特定条件,并且仍将返回数据。 我刚看完贝尔东的那篇文章。 我还找到了另一篇关于使用Criteria API的文章
问题内容: 我有一个存储过程,可根据4个参数从表中获取信息。 我想基于参数获取值,但是如果参数为NULL,则不会检查该参数。因此,如果所有4个参数都为null,则将显示整个表。 这是我的SP(如您所见,这仅适用于1个参数atm): 有什么方法可以做到, 而 不必为每种可能的组合都加一个(15个IF)? 问题答案: 怎么样 在这种情况下,您可能还使用了 但总的来说,您可以尝试类似
说我有下面的JPA方法: 用户通过输入字段和选择字段过滤这些对象的列表,从而调用此方法: 在这种情况下,如果用户不使用该字段进行搜索,则布尔值可以是true、false或null。看起来JPA实际上是在搜索一个空值,而我希望它忽略任何空值。我已经能够使用以下代码进行此组合搜索: 这是可行的,但显然,在一个有8个搜索选项的页面上,这将成为一场噩梦。字符串参数没有这个问题,因为当用户不选择过滤器时,它
Spring Hateoas没有为以下请求映射创建适当的链接: 致电/会员/12345时,您希望返回: 但相反,它返回: 这是为什么?即使我使用@Request estParam,它也完全忽略了过滤器。在这件事上,任何建议都将受到赞赏。
如果没有声明相应的值,是否有可能动态忽略一些可选的参数?