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

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

from Table T where T.columnName like '%"+var+"%'

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

from Table T where T.columnName like N'%"+var+"%'

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

线程“AWT-EventQueue-0”中的异常

org.hibernate.hql.internal.ast.QuerySyntaxException:意外的标记:N在第1行附近

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


问题是,HQL!= T-SQL,你正在混合这两个。 HQL是伪SQL,因此不理解Unicode字符串的T-SQL特定方言处理(即字符串文字上的N -prefix)。

所以,你似乎有两个选择:

  • HQL

    继续使用createQuery ,如下所示:

    session.createQuery("from Table T " +
                        "where T.column like :fltr ")
           .setParameter( "fltr", "%" + content + "%", StringNVarcharType.INSTANCE )
           .list();
    
  • T-SQL

    如下切换到使用createSQLQuery

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

    这里可能还有更多,但我无法测试它。

  • 更多信息和示例可以在以下位置找到:Hibernate ORM 5.2.4.Final用户指南:

  • 上面的HQL代码基于例子334
  • 在2.3.1的图表中找到StringNVarcharType类型。 Hibernate提供的BasicTypes:表1.标准BasicTypes
  • 基于示例402和示例423的上述T-SQL代码

  • 将var声明为NVARCHAR,并删除引号。

    FROM Table T WHERE T.columnName LIKE N'%' + var + N'%'
    

    使用以下HQL:

    String hql = "FROM Table T WHERE T.columnName LIKE CONCAT('%', :columnValue, '%')";
    session.createQuery(hql)
           .setString("columnValue", "Sample Value")
           .list();
    
    链接地址: http://www.djcxy.com/p/93997.html

    上一篇: Cannot query SQL Server table containing Arabic from my Java app using HQL

    下一篇: Plot 3D prisms using ggplot2 and plotly