【问题标题】: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 中存在类似的机制,我会说这将是您最好的方法。

      【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2015-07-10
      • 2011-12-01
      • 2019-04-12
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多