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

时间:2018-03-19 16:19:11

标签: java postgresql spring-data-jpa

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

1 个答案:

答案 0 :(得分:1)

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

因为您使用的是PostgreSQL,所以可以使用unaccent Extension它可以帮助您,除此之外您必须创建原生自定义查询,如下所示:

<强> PostgreSQL的

NodeList

注意:您必须在数据库中启用此@Query(nativeQuery = true, value = "SELECT * FROM schema_name.table_name " + "WHERE unaccent(col_name) = unaccent(:name)") public List<EntityName> find(@Param("name") String name); 扩展程序:

unaccent

<强>的MySQL

对于那些使用MySQL的人,你可以使用CREATE EXTENSION unaccent; 像这样:

collate utf8_bin

SQL Server

对于使用Oracle的用户,您可以使用collation

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

参考文献: