在休眠中使用 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: No Dialect mapping for JDBC type: -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 行:意外令牌:选项 java.lang.reflect.undeclaredThrowableException at com.sun.proxy.$Proxy 20.createQuery(未知来源(

由: java.lang.reflect.InvocationTargetException

原因:java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;(五

我不知道如何做到这一点。

我的配置:休眠.cfg.xml

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

你正在将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();

最新更新