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

标签 java sql-server hibernate unicode hql

我正在开发一个 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 前缀)。

因此,您似乎有两个选择:

  1. 高级语言

    继续使用createQuery如下:

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

    切换到使用 createSQLQuery 如下:

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

    这里可能还有更多工作要做,但我没有办法测试它。

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

关于java - 无法使用 HQL 从我的 Java 应用程序查询包含阿拉伯语的 SQL Server 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40612895/

相关文章:

sql - 如何在 SQL Server 中的 xml 列中查询 xml 值

sql-server - SQL Server如何监控表结构变化?

java - Openshift 无法找到持久性单元

java - mysql View 在事务中不刷新(Hibernate/Spring)

java - 如何修复 Java 中的矩阵乘法

Java ScrollPane 和 Canvas - 将 Canvas 锁定为 JScrollPane 大小

sql - 如何从 MS SQL 数据库(Microsoft SQL Server)中的其他 .sql 文件运行 .sql 文件?

java - 将 hibernate-validator 与 wicket 集成

java - Hystrix 回退方法最佳实践

java - 如何让MediaPlayer重复播放声音?