通过休眠调用时带有游标的存储过程失败

时间:2017-05-02 12:37:34

标签: hibernate sybase

我们在项目中使用hibernate作为ORM工具。我们有一个需要调用存储过程的场景。现在,此存储过程在内部使用游标来查看存储在数据库表中的规则列表。

当我们遍历游标时,我们检查@@ sqlstatus!= 2。当光标中的结果集完全遍历时,sqlstatus将为2。

当我们使用exec直接执行存储过程时,它返回结果。它也运行在java JDBC代码中。但是当我们通过hibernate调用时,它在条件检查失败了@@ sqlstatus!= 2,因为它以某种方式找到sqlstatus = 2.我们在存储过程中尝试了几个调试语句,当通过hibernate调用存储过程时,它不会将结果集遍历为sqlstatus = 2,因此存储过程返回null。

我们正在使用sybase ASE 15.7,hibernate 4.1版本。

请让我知道可能是什么问题。

1 个答案:

答案 0 :(得分:1)

游标到达@@ sqlstatus = 2是很自然的,因为这表示结果集的结束,并且通常会读取游标,直到该条件发生。究竟为什么这种情况发生在一个场景中而不是另一个场景中,这里的任何人都不会想到这一点。可能存在差异,即数据不同(在其中一个场景中是否存在开放事务?)或其他内容。看起来你必须对SQL代码进行一些调试。