【发布时间】:2010-11-13 05:24:14
【问题描述】:
我正在使用 Spring 和 Hibernate。和 Atomikos 进行交易。我使用基于注释的事务。我有一个 DAO 对象,并在其中一种方法中调用 entityManager.persist() 来保存对象。 现在,每当更新期间出现 ORA 错误时,例如违反约束或其中一列的长度超过数据库中定义的 wat,我会得到 JTAUnexpectedRollbackException 而不是 Spring 抛出的 GenericJDBCException。 我尝试尝试坚持以抓住这一点,但我没有得到任何异常。似乎 Hibernate 在刷新期间执行了实际的更新语句,这发生在事务提交期间,因此我猜是 UnexpectedRollbackException。
如何解决这个问题并获取 GenericJDBCException 而不是 UnexpectedRollbackException?
【问题讨论】:
-
为什么获得 GenericJDBCException 而不是 JTAUnexpectedRollbackException 如此重要?为什么要在持久化上捕获异常而不是在事务提交时捕获?
-
因为当调用我的库的客户端得到 UnexpectedRollback 时他不知道出了什么问题,GenericJDBCException 显示了 SQLException 的堆栈跟踪,但回滚异常没有完整的堆栈跟踪。跨度>
-
是的,使用 Spring 管理事务的部分优势在于,无论底层如何,都有一个统一的异常。
标签: java database hibernate spring