处理Spring声明式事务管理中的Hibernate异常

时间:2011-08-26 13:24:04

标签: hibernate spring transactions staleobjectstate

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

1 个答案:

答案 0 :(得分:4)

你不应该抓住这个例外。来自Hibernate reference documentation

  

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

这意味着除了捕获异常以进行转换或将其包装到另一种异常中之外,捕获异常对您无效:使用会话后无论如何都无法正常工作。

有关讨论乐观锁定异常处理的另一个问题,请参阅How to deal with locks (JPA)?