我有一个存储过程,它执行几个更新/插入。我使用来自 java 客户端的 Hibernate 调用它的执行。我希望这段代码在 java 中引发异常,以防过程引发错误(例如,如果其中一个语句由于违反约束而失败)。很简单,不是吗?
Java 代码如下所示:
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
SQLQuery query = s.createSQLQuery("exec myProc :date");
query.setTimestamp("date", new Timestamp(valDate.getTime()));
try {
query.executeUpdate();
} catch (HibernateException e) { ... } }
在这个过程中,我插入这个语句来模拟错误的发生。
raiserror('this is bad', 11, 1);
如果这是程序的第一个语句,它可以正常工作,所以如果我从 mgmt studio 调用它,输出如下所示:
消息 50000,级别 11,状态 1,过程 upd_position_list_hist,第 85 行,这是错误的
Java 代码捕获异常,一切正常。
但是,如果我将错误引发语句放在 proc 的中间——在它进行一些更新/插入之后——那么输出将如下所示:
(0 行受影响)(1 行受影响)(1 行受影响)消息 50000,级别 11,状态 1,过程 upd_position_list_hist,第 85 行,这很糟糕
- 这将停止在 java 端抛出异常。代码执行完毕,没有抛出任何 HibernateException。可能是什么问题,我该如何解决?