Hibernate和特殊字符

时间:2009-03-26 15:43:33

标签: java database oracle hibernate

想象一下,我有一个包含一个表的数据库,这个表只有一个名为“word”的字段和一些其他数据,想象一下用户可以通过键入该字段的内容来搜索数据。我在这张桌子上用西班牙语口音说了很多话。

单词示例

酸碱

AUTOBUS

载重汽车

问题

如果用户搜索“acido”或“ácido”字样,查询将返回“ácido”行。如何使用Hibernate?

修改

我正在使用Oracle 10g作为RDBMS和Hibernate命名查询。

提前致谢

2 个答案:

答案 0 :(得分:2)

Hibernate将简单地将搜索传递到数据库。如果您的数据库设置为以不同方式识别它们,那么Hibernate也是如此。

在SQL Server中,您可以为列(或表或数据库 - 选择是您的)设置排序规则,以使该数据重音不敏感。怀疑其他DBMS中存在类似的机制,我认为这将是您最好的方法。

答案 1 :(得分:0)

最后,我在类似于此的命名查询中使用Oracle TRANSLATE函数:

  <query name="queryName">
  <![CDATA[
        FROM Table
        WHERE 
          upper(TRANSLATE(nivell_1,'ÀàÉÈéèÍíÓóÒòÚú','AaEEeeIiOoOoUu')) LIKE
          upper(TRANSLATE(nivell_1,'ÀàÉÈéèÍíÓóÒòÚú','AaEEeeIiOoOoUu'))
  ]]>         
  </query>