我在Spring + Hibernate + Struts应用程序中使用了PROPAGATION_REQUIRED声明式事务管理方法。
我可以在进行服务调用的地方(事务开始的地方)捕获StaleObjectException
(预期)。在服务方法中有嵌套调用Foo1,Foo2,Foo3来执行更新。我想在这些方法中捕获异常。我怎么能这样做?任何替代方案或解决方法?
答案 0 :(得分:4)
你不应该抓住这个例外。来自Hibernate reference documentation:
如果Session抛出异常,包括任何SQLException, 立即回滚数据库事务,调用Session.close() 并丢弃Session实例。 Session的某些方法不会 使会话保持一致状态。没有例外 Hibernate可以被视为可恢复的。
这意味着除了捕获异常以进行转换或将其包装到另一种异常中之外,捕获异常对您无效:使用会话后无论如何都无法正常工作。
有关讨论乐观锁定异常处理的另一个问题,请参阅How to deal with locks (JPA)?。