SpringDataJpa:多个ContainingIgnoreCase

SpringDataJpa: Multiple ContainingIgnoreCase

我有类似下面的内容。基本上我想得到所有的书在他们的标题或描述中包含某些关键词。 Spring 一直给我这个方法的错误。 Title 或 Descr 中的单个 select 有效,但我无法将它们放在一起。我错过了什么?

作品:

findBookByTitleContainingIgnoreCase(String keyWord)

findBookByDescrContainingIgnoreCase(String keyWord)

无效: findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord)

这会起作用:

findByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String title, String descr);

然后您可以将此方法调用为 bookRepository.findByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(keyword, keyword)

记住如何使用 Spring Data JPA 形成查询的一种简单方法是记住方法名称最终变为 JDBC PreparedStatements。方法名称中的每个关键字(class 属性)都成为 PreparedStatement 中的一个参数。因此,在执行 PreparedStatement 时,每个参数都必须绑定到一个值。因此,该方法必须具有相同数量的参数才能使 PreparedStatement 正确执行。

当你将这种想法应用到你的问题中时,你会看到你的方法名称有两个关键字 - TitleDescr 但只有一个参数。因此,PreparedStatement 中的第二个参数在执行 PreparedStatement 时保持未绑定状态;因此错误。提供这两个参数即可解决问题。

Github.

上带有工作测试用例的示例代码

findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord, String keyWord2); 解决了我的问题。