1

对于这样一个简单的查询,DB2 在hibernate 中使用时会无缘无故地抛出SQL 错误。

我想我已经为休眠属性设置了 DB2 的所有设置,因为其他一些查询运行良好。

    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 为我生成查询我没有生成查询。

任何帮助将非常感激。

谢谢斯里达尔。

4

1 回答 1

1

DB2 引入了一种称为“敏感游标”的游标,它应该能够看到(某些)游标打开后数据所做的更改。替代方案是“不敏感”和“不敏感”游标类型。

如果查询返回只读结果集,这意味着敏感游标将无法看到数据更改,因为它的结果集与实际数据分离。DB2 返回错误 -243 表示它不能满足请求的“敏感”行为。

由于您的查询包括连接,它返回只读结果集,因此您会收到错误。

如果您不需要这种敏感性(例如您不打算更新数据),您可以尝试将 JDBC 属性 cursorSensitivity 设置为 TYPE_SCROLL_ASENSITIVE(即值为 2 的 int)。该参数可以像这样在 JDBC URL 字符串中编码:

jdbc:db2://hostname:port/dbname:cursorSensitivity=2;

有关详细信息,请参见此处(或更好——请参见实际 DB2 版本的相应页面):

于 2013-02-11T14:09:22.890 回答