我有一个查询来从db中选择类似的实体。
Query query = entityManager.createQuery("select c from Case c where c.lastName = :lastName");
但我有一个问题。
实体的'lastname'值在数据库中是'SAĞLAM',查询的参数是'SAGLAM',反之亦然。所以查询不给实体。
C /Ç,S /Ş,G /Ğ,O /Ö,U /Ü,I /İ的情况发生。
我该如何解决这个问题?我可以写一个正则表达式吗?
答案 0 :(得分:2)
在JPQL中你不能这样做......但是使用hibernate(HQL),你可以do this:
select upper(convert('This is a têst','US7ASCII')),
upper(convert('THIS is A test','US7ASCII'))
from dual;
select 1 from dual
where upper(convert('This is a têst','US7ASCII')) =
upper(convert('THIS is A test','US7ASCII'))
要使用其他JPA实现执行此搜索,您需要使用nativeQuery
并选择以下选项中的一些:
SELECT
中数据库的整理,如(SQL Server示例):SELECT e.name FROM Entity e WHERE e.name COLLATE Latin1_General_CI_AI LIKE 'têst' COLLATE Latin1_General_CI_AI
SOUNDEX
regex
功能如果你真的需要使用JPQL:
INSERT
或UPDATE
原始列时删除重音。这可能是性能的最佳选择。