Jas*_*Dan 3 java postgresql spring-data-jpa
我使用 Spring Data JPA 方法名称查询来执行 SQL 查询,例如findByNameContains(String name)查找名称包含给定字符串的所有实体。但它仅适用于确切的字符。我想知道如果用户输入\xc3\xa9,如何返回名称包含字符\xc3\xa9及其基本字符的所有实体e。谢谢。
我认为 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)
参考 :
| 归档时间: |
|
| 查看次数: |
4532 次 |
| 最近记录: |