使用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用户指南:
StringNVarcharType
类型。 Hibernate提供的BasicTypes:表1.标准BasicTypes 将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