首页 > 解决方案 > 在 Hibernate 中使用 OPTION 子句的 SQL 查询

问题描述

我使用 SQL Server 2008 作为 DBMS,我想在 Hibernate 中查询一个 OPTION 子句设置为 (ROBUST PLAN) 的视图。

我尝试了这些解决方案:

try {
    mylist = (List<MyObject>) session.createSQLQuery("SELECT * FROM MyTable "+WHERE+" OPTION(ROBUST PLAN)").list();
    session.getTransaction().commit();
}

出现此错误:

org.hibernate.MappingException:没有 JDBC 类型的方言映射:-9

try {
    mylist = (List<MyObject>) session.createQuery("from MyTable " + WHERE + " OPTION(ROBUST PLAN)").list();
    session.getTransaction().commit();
}

出现此错误:

2020-06-11 17:14:23 错误解析器:56 - 第 1:66 行:意外令牌:com.sun.proxy.$Proxy20.createQuery 的选项 java.lang.reflect.UndeclaredThrowableException(未知来源)

引起:java.lang.reflect.InvocationTargetException

引起:java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V

我不知道如何使这项工作。

我的配置:Hibernate.cfg.xml

        <property name="connection.driver_class">
            com.microsoft.sqlserver.jdbc.SQLServerDriver
        </property>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

标签: javasqlsql-serverhibernate

解决方案


您正在将 MySQLDialect 与需要更正的 MSSQLServerDriver 结合使用。接下来,我假设您使用的是 MS SQL 服务器,并确保您的查询运行没有任何问题。

String sql = "SELECT * FROM MyTable WHERE OPTION(ROBUST PLAN)";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(MyObject.class);
List<MyObject> results = query.list();

推荐阅读