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中完美运行.
问题是 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();
Run Code Online (Sandbox Code Playgroud)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中找到:
StringNVarcharType类型见2.3.1表。Hibernate 提供的 BasicType:表 1. 标准 BasicType | 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |