对于像这一个简单的查询,DB2在hibernate中使用时无缘无故地抛出SQL错误。
我认为我已经将DB2 for Hibernate属性的所有设置都正确,导致其他一些查询运行正常。
SQLException for SQL [/* criteria query */
select this_.col1,this_.col2,this2_.col1,this2_.col3
from TABLE this_
left outer join TABLE1 this2_
on this_.TAB1_ID=this2_.ID
where this2_.ID=?
]; SQL state [36001]; error code [-243]; could not execute query using scroll; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query using scroll
我试着查看IBM网站,它根本没用,因为相同的测试用例在hsqldb上运行正常。
注意:Hibernate为我生成查询,但我没有生成查询。
任何帮助都会非常感激。
由于 斯里达尔。
答案 0 :(得分:1)
DB2引入了一种称为“敏感游标”的游标,它应该能够看到光标打开后数据的(某些)变化。 替代方案是“敏感”和“不敏感”的游标类型。
如果查询返回只读结果集,这意味着敏感游标将无法看到数据更改,因为它的结果集与实际数据分离。 DB2返回错误-243,表示它无法满足请求的“敏感”行为。
由于您的查询包含join,它将返回只读结果集,因此您会收到错误。
如果您不需要这样的敏感性(例如,您不打算更新数据),可以尝试将JDBC属性cursorSensitivity设置为TYPE_SCROLL_ASENSITIVE(即值为2的int)。此参数可以在JDBC URL字符串中编码,如下所示:
jdbc:db2://hostname:port/dbname:cursorSensitivity=2;
有关详细信息,请参阅此处(或更好 - 请参阅适用于您的DB2版本的相应页面):