将@Transactional和@RequestMapping与RuntimeExceptions一起使用

时间:2013-03-04 22:57:44

标签: java spring hibernate

我有点奇怪,我希望有人能说清楚。我正在使用Hibernate 3.6.10Spring Framework 3.1.2.RELEASE

我有一个@Controller方法注释@RequestMapping@Transactional,我知道这是一件坏事。由于一些繁琐的问题,我们现在必须这样做,但这不是真正的问题。所有延迟加载在Controller / Transactional中按预期工作。

这些事务方法调用@Service,其方法也标记为普通旧@Transactional,这应该将所有内容保存在同一事务中,因为Propagation.REQUIRED是默认值。到目前为止一切都很好。

现在这是令人迷惑的花絮。 @Service方法抛出XyzException扩展RuntimeException,据称将事务标记为仅回滚。通过这种逻辑,正在使用的唯一事务应该回滚,并且在事务结束之前没有重新抛出而在XyzException方法中处理@Controller的任何尝试都应该导致另一个更少的预期{{1}来自Hibernate表示由于事务被标记为仅回滚,提交操作失败。但事实并非如此。

相反,事务回滚并且重定向(使用POST,重定向,GET)成功发生。没有例外,没有混乱。

RuntimeException

我使用了So the question is, "What am I doing to make this work as it does?",所以我想也许这些交易实际上并没有从OpenSessionInViewInterceptor级开始。但是,当我删除@Controller时,Lazy Load操作就会中断。

- 编辑 -

因此,无论OSIV是否废话,我是否能够处理@Transactional方法中的XyzException 内部是否有意义?我认为在@Transactional内部处理RuntimeException的方法没有被重新抛出会导致错误。问题的@Transactional方法是否为入口点(即调用的第一个@Transactional方法)是否重要?

0 个答案:

没有答案