正则表达式 – 如何为类似字符编写JPQL查询

我有一个查询从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原始列时删除重音.这可能是性能的最佳选择.

点赞