【发布时间】:2015-09-23 07:46:56
【问题描述】:
我有一个使用 UTF-8 的 Oracle 数据库。我正在发出一些搜索查询,likepredicates 按某些名称列进行过滤。
由于表中的数据是法语和德语名称,它们可能包含重音字符,例如àäèüéöetc...
用 JPQL 编写的 like 谓词如下所示(我简化以仅保留相关部分):
...where lower(convert(item.value, 'US7ASCII')) like lower(convert(CONCAT('%',:query,'%'), 'US7ASCII'))
一旦转换为 Oracle 方言,就会产生以下 SQL:
lower(convert(items4_.SSI_ITEM, 'US7ASCII')) like lower(convert('%'||?||'%', 'US7ASCII'))
likeoperator 的两边都转换为小写字母和 ?US7ASCII` 字符集,从而消除了重音符号。请注意,双方都是由数据库本身转换的,使用相同的函数。可以说,它使搜索“不区分重音”。
现在,这可以正常工作并用于相对简单的查询,该查询返回字段自动完成的名称。
但是,主要搜索查询更加复杂和动态(大量连接、动态条件),我正在使用 QueryDSL 来构建它。
是否可以在 JPA 上使用 QueryDSL 重现上述字符转换?
【问题讨论】:
标签: java oracle hibernate jpa querydsl