【发布时间】:2016-06-22 02:07:41
【问题描述】:
我有一个使用 Java 6 编写的后端服务器,带有 JBoss 5.1。我必须将该代码上的 Oracle 过程(存储在包中)调用为如下方法:
cs = conn.prepareCall("{call <user>.<package>.<procedure_name>(?,?,?,?,?,?,?,?,?)}");
cs.setString(1, <data>);
cs.setString(2, <data>);
cs.setString(3, <data>);
cs.setDate(4, <data>);
cs.setString(5, <data>);
cs.registerOutParameter(6, Types.VARCHAR);
cs.registerOutParameter(7, Types.VARCHAR);
cs.registerOutParameter(8, Types.BIGINT);
cs.setInt(9, <data>);
try{
cs.execute();
}catch (RuntimeException e){
e.getMessage();
}catch (Exception e){
e.getMessage();
}
Long numerr = cs.getLong(8);
当我调用cs.execute() 时出现问题。该调用会阻塞执行,无法继续正常执行和持久化数据。
有必要说这个过程正常执行 insert 数据到另一个基于第三个表的表中,我之前在其中插入了具有正常类创建和EntityManager.persist(<entity>) 和EntityManager.flush() 的数据.
这不是授予权限问题,因为我可以在SQLDeveloper上使用正确的句子和正确的用户/密码执行该过程。
【问题讨论】:
-
在 SQL Developer 中调用过程完成的插入是提交还是回滚?听起来插入只是被另一个会话阻止了。
-
嗯,我不这么认为,虽然我尝试插入我之前的数据,关闭连接,创建另一个连接,创建可调用语句然后执行,问题仍然存在,
cs.execute()仍然阻塞 -
但是您说您从 SQL Developer 成功运行了它。我说的是那个会话,而不是你之前在 Java 中所做的事情。
-
不,这不是问题。即使我关闭 SQL Developer,甚至重新启动计算机。问题依然存在。
-
可能是Java坚持阻塞调用过程语句?
标签: java oracle stored-procedures hibernate-entitymanager