0

我为我的 Spring+Hibernate+Struts 应用程序使用了 PROPAGATION_REQUIRED 声明式事务管理方法。我可以在进行服务调用的地方(事务开始的地方)捕获StaleObjectException(预期的)。在执行更新的服务方法中有嵌套调用 Foo1、Foo2、Foo3。我想在这些方法中捕获异常。我该怎么做?任何替代方案或解决方法?

4

1 回答 1

4

你不应该捕捉到这个异常。从休眠参考文档

如果 Session 抛出异常,包括任何 SQLException,立即回滚数据库事务,调用 Session.close() 并丢弃 Session 实例。Session 的某些方法不会使会话保持一致状态。Hibernate 抛出的任何异常都不能被视为可恢复的。

这意味着除了捕获异常以将其转换或将其包装为另一种异常之外,捕获异常对您没有帮助:使用 session after 无论如何都不会按预期工作。

请参阅如何处理锁 (JPA)?对于另一个讨论乐观锁定异常处理的问题。

于 2011-08-26T13:33:07.407 回答