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 PreparedStatement
s。方法名称中的每个关键字(class 属性)都成为 PreparedStatement
中的一个参数。因此,在执行 PreparedStatement
时,每个参数都必须绑定到一个值。因此,该方法必须具有相同数量的参数才能使 PreparedStatement
正确执行。
当你将这种想法应用到你的问题中时,你会看到你的方法名称有两个关键字 - Title
和 Descr
但只有一个参数。因此,PreparedStatement
中的第二个参数在执行 PreparedStatement
时保持未绑定状态;因此错误。提供这两个参数即可解决问题。
上带有工作测试用例的示例代码
findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord, String keyWord2);
解决了我的问题。
我有类似下面的内容。基本上我想得到所有的书在他们的标题或描述中包含某些关键词。 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 PreparedStatement
s。方法名称中的每个关键字(class 属性)都成为 PreparedStatement
中的一个参数。因此,在执行 PreparedStatement
时,每个参数都必须绑定到一个值。因此,该方法必须具有相同数量的参数才能使 PreparedStatement
正确执行。
当你将这种想法应用到你的问题中时,你会看到你的方法名称有两个关键字 - Title
和 Descr
但只有一个参数。因此,PreparedStatement
中的第二个参数在执行 PreparedStatement
时保持未绑定状态;因此错误。提供这两个参数即可解决问题。
findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord, String keyWord2);
解决了我的问题。