使用 Spring CrudRepository 进行不区分大小写的查询
Posted
技术标签:
【中文标题】使用 Spring CrudRepository 进行不区分大小写的查询【英文标题】:Case insensitive Query with Spring CrudRepository 【发布时间】:2014-04-29 16:28:11 【问题描述】:使用 Spring CrudRepository 查询;我想选择具有“名称”属性的“设备类型”实体。但以下查询以区分大小写的方式选择权利。我如何使它不区分大小写。谢谢。
public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType>
public Iterable<DeviceType> findByNameContaining(String name);
【问题讨论】:
你试过public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);
吗?
如果您对 Query 感兴趣,请试试这个,LIKE @Query(value= "select dt from DeviceType as dt where lower(dt.name ) like lower(:name)") public Iterable<devicetype> anyMethodNameGoesHere(@Param(name) String name);</devicetype>
这可能对你有帮助,***.com/questions/37178520/jpql-like-case-insensitive/…
【参考方案1】:
正如评论中提到的@Peter,只需添加IgnoreCase
:
public interface DeviceTypeRepository
extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType>
public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
请参阅 documentation 以获取方法名称中所有受支持的关键字的列表。
【讨论】:
非常感谢您的回答;当然我会参考该文档。五月谢谢。玩得开心! 它对我有用。我正在使用 JPA 查询。因此,根据文档,UPPER(x.firstame) = UPPER(?1) 工作的地方。 @sunitha 你知道我们有什么办法可以修改这种行为,比如让它变低吗?我的数据库有基于小写的索引 @SudipBhandari:当然可以。 对于多个属性重复IgnoreCase
像这样:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
【参考方案2】:
以下 Spring 数据 mongo 查询适用于我。我更喜欢使用List
而不是Iterator
public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType>
List<DeviceType> findByNameIgnoreCase(String name);
【讨论】:
【参考方案3】:对于那些使用自定义 JPA 查询 Upper 关键字和 toUpperCase 的人有帮助。以下代码适用于我
return entityManager.createQuery("select q from "table " q where upper(q.applicant)=:applicant")
.setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();
【讨论】:
使用'upper(q.applicant)'时要小心。在 Postgres 中,当 q.applicant 为 null 时,它会导致 '.PSQLException: ERROR: function upper(bytea) does not exist'【参考方案4】:在我的情况下,添加 IgnoreCase
根本不起作用。
我发现也可以为正则表达式提供选项:
@Query(value = "'title': $regex : ?0, $options: 'i'")
Foo findByTitleRegex(String regexString);
i
选项使查询不区分大小写。
【讨论】:
以上是关于使用 Spring CrudRepository 进行不区分大小写的查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Boot CrudRepository 过滤数据
通过 HTTP 保护 Spring Data RepositoryRestResource (CrudRepository),但不在内部
使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]