我正在开发一个 Java Swing 应用程序,我在其中查询 SQL Server 数据库中的一个表。此表包含一些阿拉伯语、中文等数据...但问题是我在使用此查询时没有得到任何结果:(var 可以是阿拉伯语或任何其他语言):
from Table T where T.columnName like '%"+var+"%'
我做了一些搜索,然后尝试了以下操作:
from Table T where T.columnName like N'%"+var+"%'
我在 NetBeans 上收到此错误消息:
Exception in thread "AWT-EventQueue-0"
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: N near line 1
有人可以帮我解决这个问题吗?我很困惑,知道最后一个查询在 SQL Server Management Studio 中运行得很好。
最佳答案
问题是 HQL != T-SQL,而您将两者混合在一起。 HQL 是伪 SQL,因此不理解 Unicode 字符串的 T-SQL 特定方言处理(即字符串文字上的 N
前缀)。
因此,您似乎有两个选择:
高级语言
继续使用
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 User Guide :
- 基于示例 334 的上述 HQL 代码
StringNVarcharType
类型在 2.3.1. Hibernate-provided BasicTypes: Table 1. Standard BasicTypes 的图表中找到- 以上基于示例 402 和示例 423 的 T-SQL 代码
关于java - 无法使用 HQL 从我的 Java 应用程序查询包含阿拉伯语的 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40612895/