简体   繁体   English

SQL 使用 Hibernate 中的 OPTION 子句进行查询

[英]SQL Query with OPTION clause in Hibernate

I use SQL Server 2008 as DBMS and I want to query a view with an OPTION clause set to (ROBUST PLAN) in Hibernate.我使用 SQL Server 2008 作为 DBMS,我想在 Hibernate 中查询一个 OPTION 子句设置为(ROBUST PLAN)的视图。

I tried these solutions:我尝试了这些解决方案:

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

with this error:出现此错误:

org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 org.hibernate.MappingException:没有 JDBC 类型的方言映射:-9

and

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

with this error:出现此错误:

2020-06-11 17:14:23 ERROR PARSER:56 - line 1:66: unexpected token: OPTION java.lang.reflect.UndeclaredThrowableException at com.sun.proxy.$Proxy20.createQuery(Unknown Source) 2020-06-11 17:14:23 错误解析器:56 - 第 1:66 行:意外令牌:选项 java.lang.reflect.UndeclaredThrowableException 在 com.sun.proxy.

Caused by: java.lang.reflect.InvocationTargetException引起:java.lang.reflect.InvocationTargetException

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

I don't know how to make this work.我不知道如何使这项工作。

My config: Hibernate.cfg.xml我的配置:Hibernate.cfg.xml

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

You're combining MySQLDialect with MSSQLServerDriver which need to be corrected.您正在将 MySQLDialect 与需要更正的 MSSQLServerDriver 结合使用。 Next, I assume you're using MS SQL server and make sure your query runs without any issue.接下来,我假设您使用的是 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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM