java - 在 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>
解决方案
您正在将 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();
推荐阅读
- python - 如何计算导入类的不同方法执行了多少次?
- c# - 使用带有预加载函数的内存数据库对 EF Core 进行单元测试
- azure-aks - 无法提取图像 - 未经授权:需要身份验证 (ImagePullBackOff )
- javascript - 如何异步添加到我的数组并等待完成?
- regex - 协助正则表达式匹配
- php - 将 id 从 foreach 循环传递到另一个页面而不使用 $_GET(url 中的 id)
- python - 从 Python 调用静态 C 库
- perl - How can I use rperl with perlbrew?
- javascript - 使用参数检索对象属性
- scala - 以语法一致的方式将 args 传递给 n 个参数的 fns