如何忽略 Spring JPA findBy 存储库中的重音符号?

Posted

技术标签:

【中文标题】如何忽略 Spring JPA findBy 存储库中的重音符号?【英文标题】:How to ignore accents in Spring JPA findBy repository? 【发布时间】:2019-07-05 05:23:03 【问题描述】:

假设我们有这个存储库:

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType>     
    public Iterable<DeviceType> findByNameContaining(String name);    

如何通过忽略用户错误输入重音搜索过滤器来获得相同的结果?

示例:João | Joao | JOÃOMarcio | Márcio

【问题讨论】:

可以从字符串中删除重音符号,但您必须保存不带重音符号的信息(一个版本)。见:***.com/questions/3322152/… 【参考方案1】:

在 Spring 的内置功能中无法做到这一点。你可以考虑使用Elastic Search来做这件事,有一篇关于这个主题的文章You Have an Accent。

另一种方法是不在 DB 中存储重音字母并在执行 SQL 请求之前执行映射或使用自定义 SQL 函数在 DB 端执行映射 - 但这是一个过于繁琐和脆弱的解决方案。

【讨论】:

以上是关于如何忽略 Spring JPA findBy 存储库中的重音符号?的主要内容,如果未能解决你的问题,请参考以下文章

Spring数据JPA中findBy和findOneBy的区别

Spring Data JPA findBy一个集合[重复]

spring data jpa getOne抛出LazyInitializationException而findBy没有

Spring Data JPA 之间 findBy / findAllBy 的区别

spring data jpa getOne 抛出 LazyInitializationException 和 findBy 不

spring data jpa 创建方法名进行简单查询