我有一个查询从db中选择类似的实体.
Query query = entityManager.createQuery("select c from Case c where c.lastName = :lastName");
但我有一个问题.
实体的’lastname’值在数据库中是’SAĞLAM’,查询的参数是’SAGLAM’,反之亦然.所以查询不给实体.
情况发生在C /Ç,S /Ş,G /Ğ,O /Ö,U /Ü,I /İ.
我怎么解决这个问题?我可以写一个正则表达式吗?
最佳答案 在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_AILIKE’têst’COLLATELatin1_General_CI_AI
>使用数据库的本机功能,例如SOUNDEX
>使用数据库的正则表达式功能
如果你真的需要使用JPQL:
>在表中创建一个新列,每次INSERT或UPDATE原始列时删除重音.这可能是性能的最佳选择.