繁体   English   中英

`@Transactional` 不适用于 Spring 2 controller

[英]`@Transactional` not working for Spring 2 controller

我的应用程序中有一个旧的 controller ,它在 xml 中定义为 spring bean,并使用 Spring 的SimpleFormController 我试图通过添加@Transactional注释使 controller 的onSubmit方法中的过程具有事务性,但它不起作用。 根据本指南,注释的调用必须发生在“bean 之外”,这是否意味着注释不能在像我这样的旧 Spring 控制器中使用? 是否有任何替代方案或解决方法?

我知道它不起作用的原因是因为1)对数据库的更改不会因错误而回滚(尽管我已经定义了rollbackFor = Exception.class ,甚至在某些情况下使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); ,在这种情况下,它尝试使用后者,它会抛出一个错误,指出不存在事务。2)我在 Spring 中实例化@Transactional的位置添加了断点,并且没有一个被命中。

编辑:所以人们要求可重现的代码示例。 问题不在于业务逻辑代码中,我正在寻找 Spring 2 controller 中注释的用法的清晰度。 所以我的例子是这样的:

public class ImportController extends SimpleFormController {

    @Override
    @Transactional(rollbackFor = Exception.class)
    public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
    ...
    }
}

你说的对。 @Transactional在这里不起作用,因为onSubmit是由同一个 bean 调用的。

在这种情况下,调用是直接完成的,默认的 spring 事务处理不起作用。

有关您拥有的选项的详细说明,请参阅此问题中的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM