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