使用Spring CrudRepository的不区分大小写的查询


102

使用Spring CrudRepository查询;我想使用“名称”属性选择“设备类型”实体。但是下面的查询选择区分大小写的权利。我如何使其不区分大小写。谢谢。

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
你尝试了public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);吗?
彼得·凯勒2014年

如果您对Query感兴趣,请尝试此操作,无需在LIKE <code> @Query(value =“在DeviceType中从dt中选择dt作为dt的位置,其中lower(dt.name)像lower(:name)一样给出'%' )public Iterable <DeviceType> anyMethodNameGoesHere(@Param(name)String name); </ code>
Java_Fire_Within

这可能对您有帮助,stackoverflow.com
questions/37178520/jpql

Answers:


197

就像评论中提到的@Peter一样,只需添加IgnoreCase

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

有关方法名称内所有受支持的关键字的列表,请参见文档


非常感谢您的回答;确保我会参考该文档。可能谢谢。玩得开心!
Channa 2014年

3
它为我工作。我正在使用JPA查询。因此,根据文档,UPPER(x.firstame)= UPPER(?1)在哪里工作。
sunitha

@sunitha您知道我们可以修改此行为的任何方式,比如说降低它吗?我的数据库具有基于小写字母的索引
Sudip Bhandari

@SudipBhandari:当然可以。
sunitha

1
对于废除IgnoreCase这样的多个物业:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
塔拉尔

11

以下Spring数据mongo查询对我有用。我宁愿用List代替Iterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 

1

就我而言,添加IgnoreCase根本不起作用。

我发现也可以为正则表达式提供选项:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

i选项使查询不区分大小写。


1

对于使用自定义JPA的用户,查询Upper关键字和toUpperCase会有所帮助。以下代码对我有用

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();

1
使用“上(q。申请人)”时要小心。在Postgres中,当q.applicant为null时,它会导致“ .PSQLException:错误:函数upper(bytea)不存在”
advortsov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.