无法为指定的SELECT语句定义SENSITIVE游标“SQL_CURSH200C1”.SQLCODE = -243,SQLSTATE = 36001,DRIVER = 4.13.127

时间:2013-01-30 17:56:37

标签: java hibernate db2 hibernate-mapping db2-luw

对于像这一个简单的查询,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为我生成查询,但我没有生成查询。

任何帮助都会非常感激。

由于 斯里达尔。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

有关详细信息,请参阅此处(或更好 - 请参阅适用于您的DB2版本的相应页面):