Spring Data JPA - 转义重音法语字符 (é, à, è, û..)

Jas*_*Dan 3 java postgresql spring-data-jpa

我使用 Spring Data JPA 方法名称查询来执行 SQL 查询,例如findByNameContains(String name)查找名称包含给定字符串的所有实体。但它仅适用于确切的字符。我想知道如果用户输入\xc3\xa9,如何返回名称包含字符\xc3\xa9及其基本字符的所有实体e。谢谢。

\n

YCF*_*F_L 5

我认为 Spring Data 中不存在此功能。

因为您使用的是 PostgreSQL,所以您可以使用unaccent Extension它可以在您的情况下为您提供帮助,此外您还必须创建一个本机自定义查询,如下所示:

PostgresSQL

@Query(nativeQuery = true, value = "SELECT * FROM schema_name.table_name "
                                 + "WHERE unaccent(col_name) = unaccent(:name)")
public List<EntityName> find(@Param("name") String name);
Run Code Online (Sandbox Code Playgroud)

注意:您必须unaccent在数据库中启用此扩展:

CREATE EXTENSION unaccent;
Run Code Online (Sandbox Code Playgroud)

MySQL

对于那些使用 MySQL 的人,你可以collate utf8_bin这样使用:

@Query(nativeQuery = true, value = "SELECT * FROM table_name "
                                 + "WHERE col_name = :name collate utf8_bin")
public List<EntityName> find(@Param("name") String name);
Run Code Online (Sandbox Code Playgroud)

SQL服务器

对于那些使用 Oracle 的人,您可以使用排序规则

@Query(nativeQuery = true, value = "SELECT * FROM table_name WHERE "
        + "name COLLATE Latin1_general_CI_AI Like :name COLLATE Latin1_general_CI_AI")
public List<EntityName> find(@Param("name") String name);
Run Code Online (Sandbox Code Playgroud)

参考 :