【发布时间】:2014-01-15 21:33:55
【问题描述】:
使用@Transaction 和 Spring 的跟踪级别日志记录,我看到 Hibernate 在 db 约束上有一个异常,但它只是回滚事务。我尝试使用@Exception 尝试捕捉它,但没有成功。
我在网上看到一个建议使用 Spring AOP @AfterThrowing 来捕获此类事件。
这似乎是一种处理普通事件的相当复杂的方法。使用 try/catch 和老式的提交/回滚似乎要容易得多。有没有更好的办法 在 Spring Hibernate 中?
我正在处理来自队列的 XML 消息。根据我得到的异常类型,我可能只想捕获它并将错误的传入队列消息放入数据库错误表并继续事务。 (如果我只是盲目回滚,则消息将被放回队列中,这在某些情况下可能很好,但在其他情况下则不然)。
根据我的阅读,有一些方法可以让您了解一些错误(由于某种原因不是约束错误)并记录它们。有没有办法在异常发生后中断事务并决定是否要提交、继续或回滚?
如果没有,可以使用旧样式的提交和回滚与 spring hibernate 吗?
【问题讨论】:
-
它没有吃掉它正在处理的异常。吃东西会赶上而不是回滚。
-
吃我的意思是在处理后不抛出另一个异常。它应该抛出一个 Hibernate 运行时异常(异常的子类),但是当我使用 @Exception 时,什么都没有被捕获。我想了解异常并根据其类型更改处理。
-
他们似乎选择了通知模型。我个人不会对“有一个例外所以我回滚”感到不舒服。洒出来的牛奶当时已经被扫到地毯下面了。
标签: spring hibernate transactions