【问题标题】:Hibernate and special chars休眠和特殊字符
【发布时间】:2010-10-15 17:45:21
【问题描述】:
假设我有一个包含一个表的数据库,该表只有一个名为“word”的字段和一些其他数据,还假设用户可以通过键入该字段的内容来搜索数据。我在这张桌子上有很多带有西班牙口音的单词。
单词示例
阿西多
汽车
卡米翁
问题
如果用户搜索“acido”或“ácido”字样,查询将返回“ácido”行。 Hibernate 是如何做到这一点的?
编辑
我使用 Oracle 10g 作为 RDBMS 和 Hibernate 命名查询。
提前致谢
【问题讨论】:
标签:
java
database
oracle
hibernate
【解决方案1】:
最后我在一个类似这样的命名查询中使用了 Oracle TRANSLATE 函数:
<query name="queryName">
<![CDATA[
FROM Table
WHERE
upper(TRANSLATE(nivell_1,'ÀàÉÈéèÍíÓóÒòÚú','AaEEeeIiOoOoUu')) LIKE
upper(TRANSLATE(nivell_1,'ÀàÉÈéèÍíÓóÒòÚú','AaEEeeIiOoOoUu'))
]]>
</query>
【解决方案2】:
Hibernate 将简单地将搜索传递给数据库。如果您的数据库设置为以不同方式识别这些,那么 Hibernate 也将如此。
在 SQL Server 中,您可以为列(或表或数据库 - 由您选择)设置排序规则,以使该数据不区分重音。怀疑其他 DBMS 中存在类似的机制,我会说这将是您最好的方法。