SpringDataJpa:Multiple ContainingIgnoreCase

时间:2015-11-18 23:10:26

标签: java spring spring-data spring-data-jpa

我有类似下面的内容。基本上我想让所有的书都在其标题或描述中包含某些关键词。 Spring继续给我这个方法的错误。可以单独选择Title或Descr,但我无法将它们组合在一起。我错过了什么?

工作的:

findBookByTitleContainingIgnoreCase(String keyWord)

findBookByDescrContainingIgnoreCase(String keyWord)

不起作用:  findBookByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String keyWord)

2 个答案:

答案 0 :(得分:3)

这将有效:

findByTitleContainingIgnoreCaseOrDescrContainingIgnoreCase(String title, String descr);

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

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

当您将此思维应用于您的问题时,您会发现您的方法名称有两个关键字 - TitleDescr,但只有一个参数。因此,PreparedStatement中的第二个参数在执行PreparedStatement时仍未绑定;因此错误。提供这两个参数可以解决问题。

Github上包含工作测试用例的示例代码。

答案 1 :(得分:0)

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