虽然我认为已经提供的答案带来了一些有用的信息,但我也认为它们还不够。
Spring Data JPA的查询构建/生成机制解析了在自定义存储库接口中显式声明(由开发人员)的方法名称(这些接口扩展了CrudRepository或其任何子类型),并基于这些名称为相应的后备数据存储/数据库生成本地查询。
假设我们有一个被管理的类型(即@Entity)Person,如下所示:
class Person {
@Id
private Integer id;
private String firstname;
private String lastname;
private Integer age;
}
和一个对应的存储库,与该实体配合使用:
interface PersonRepository<Person, Integer> {
}
为了指示Spring Data JPA忽略作为用户声明的存储库方法参数提供的值的大小写,您可以使用以下方法:
1. `IgnoreCase` - 用于忽略特定字段的大小写敏感性;
2. `AllIgnoreCase` - 用于忽略所有字段的大小写敏感性。
请注意,虽然您应该将`IgnoreCase`放在要忽略大小写敏感性的字段之后,但几乎可以将`AllIgnoreCase`放在您声明的方法名称的任何位置。
针对特定字段/列忽略大小写敏感性:
忽略`firstname`和`lastname`值的大小写敏感性:
List<Person> findByFirstnameIgnoreCaseAndLastnameIgnoreCase(String firstname, String lastname);
忽略
lastname
值的大小写。
List<Person> findByFirstnameAndLastnameIgnoreCase(String firstname, String lastname);
忽略
firstname
值的大小写。
List<Person> findByFirstnameIgnoreCaseAndLastname(String firstname, String lastname);
忽略所有字段/列的大小写敏感性:
在任何参数名称之前加上AllIgnoreCase
:
List<Person> findByAllIgnoreCaseFirstnameAndLastname(String firstname, String lastname);
或者仅在某些参数名称之后:
List<Person> findByFirstnameAllIgnoreCaseAndLastname(String firstname, String lastname);
或者最后,在所有参数名称之后:
List<Person> findByFirstnameAndLastnameAllIgnoreCase(String firstname, String lastname);
甚至在一开始,将
findBy
与之交换:
List<Person> AllIgnoreCaseFirstnameAndLastname(String firstname, String lastname);
所有这些都会导致相同的行为 - 在生成查询时忽略大小写敏感性,适用于所有字段/列。
public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);
吗? - Peter Kellerpublic Iterable<DeviceType> anyMethodNameGoesHere(@Param(name) String name);</code> - Java_Fire_Within