Erk*_*rol 5 regex hibernate jpa jpql
我有一个查询从数据库中选择类似的实体。
\n\nQuery query = entityManager.createQuery("select c from Case c where c.lastName = :lastName");\n
Run Code Online (Sandbox Code Playgroud)\n\n但我有一个问题。
\n\n数据库中实体的“lastname”值为“SA\xc4\x9eLAM”,查询的参数为“SAGLAM”,反之亦然。所以查询没有给出实体。
\n\n这种情况发生在 C/\xc3\x87、S/\xc5\x9e、G/\xc4\x9e、O/\xc3\x96、U/\xc3\x9c、I/\xc4\xb0 中。
\n\n我怎么解决这个问题?我可以写一个正则表达式吗?
\n在 JPQL 中你不能这样做......但是使用 hibernate (HQL),你可以这样做:
\n\nselect upper(convert(\'This is a t\xc3\xaast\',\'US7ASCII\')),\n upper(convert(\'THIS is A test\',\'US7ASCII\'))\nfrom dual;\n\nselect 1 from dual \nwhere upper(convert(\'This is a t\xc3\xaast\',\'US7ASCII\')) =\n upper(convert(\'THIS is A test\',\'US7ASCII\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n要使用另一个 JPA 实现执行此搜索,您将需要使用nativeQuery
并选择以下一些选项:
SELECT
,例如(SQL Server 示例):SELECT e.name FROM Entity e WHERE e.name COLLATE Latin1_General_CI_AI LIKE \'t\xc3\xaast\' COLLATE Latin1_General_CI_AI
SOUNDEX
regex
你的数据库的功能如果您确实需要使用 JPQL:
\n\nINSERT
时都删除重音符号。UPDATE
也许这是性能的最佳选择。 归档时间: |
|
查看次数: |
1376 次 |
最近记录: |