我有类似下面的内容。基本上我想让所有的书都在其标题或描述中包含某些关键词。 Spring继续给我这个方法的错误。可以单独选择Title或Descr,但我无法将它们组合在一起。我错过了什么?
工作的:
findBookByTitleContainingIgnoreCase(String keyWord)
findBookByDescrContainingIgnoreCase(String keyWord)
不起作用:
findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord)
答案 0 :(得分:3)
这将有效:
findByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String title, String descr);
然后,您可以将此方法称为bookRepository.findByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(keyword, keyword)
记住如何使用Spring Data JPA形成查询的简单方法是记住方法名称最终成为JDBC PreparedStatement
。方法名称中的每个关键字(类属性)都成为PreparedStatement
中的参数。因此,在执行PreparedStatement
时,每个参数必须绑定到一个值。因此,该方法必须具有相同数量的参数才能使PreparedStatement
正确执行。
当您将此思维应用于您的问题时,您会发现您的方法名称有两个关键字 - Title
和Descr
,但只有一个参数。因此,PreparedStatement
中的第二个参数在执行PreparedStatement
时仍未绑定;因此错误。提供这两个参数可以解决问题。
Github上包含工作测试用例的示例代码。
答案 1 :(得分:0)
findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord, String keyWord2);
解决了我的问题。