无法使用HQL从我的Java应用程序查询包含阿拉伯语的SQL Server表

The*_*ila 7 java sql-server unicode hibernate hql

我正在研究Java Swing应用程序,我在SQL应用程序中查询SQL Server数据库中的表.此表包含一些阿拉伯语,中文等数据......但问题是我在使用此查询时没有得到任何结果:(var可以是阿拉伯语或任何其他语言):

from Table T where T.columnName like '%"+var+"%'
Run Code Online (Sandbox Code Playgroud)

我做了一些搜索,然后尝试了以下内容:

from Table T where T.columnName like N'%"+var+"%'
Run Code Online (Sandbox Code Playgroud)

我在NetBeans上收到此错误消息:

线程"AWT-EventQueue-0"中的异常

org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:N靠近第1行

有人可以帮我解决这个问题吗?我很困惑知道这个相同的最后一个查询在SQL Server Management Studio中完美运行.

Sol*_*zky 4

问题是 HQL != T-SQL,而您将两者混合在一起。HQL 是伪 SQL,因此不理解 Unicode 字符串的 T-SQL 特定方言处理(即N字符串文字上的 - 前缀)。

所以,看起来你有两个选择:

  1. 赫奎尔

    继续使用createQuery如下:

    session.createQuery("from Table T " +
                        "where T.column like :fltr ")
           .setParameter( "fltr", "%" + content + "%", StringNVarcharType.INSTANCE )
           .list();
    
    Run Code Online (Sandbox Code Playgroud)
  2. T-SQL

    切换到使用createSQLQuery如下:

    session.createSQLQuery("select * from Table T where T.column like N'%" +
                           content + "%' ").list();
    
    Run Code Online (Sandbox Code Playgroud)

    这里可能还有更多要做的事情,但我无法测试它。

更多信息和示例可以在: Hibernate ORM 5.2.4.Final User Guide中找到: