Java Spring MVC控制器中的事务回滚

Java Spring MVC控制器中的事务回滚,java,spring,spring-mvc,transactions,rollback,Java,Spring,Spring Mvc,Transactions,Rollback,我有一个用@Transaction注释的Spring MVC控制器,在某些输入下,我需要回滚事务 据我所知,触发回滚的正确方法是从控制器抛出异常 但是如果我从控制器抛出异常,我就没有机会从控制器返回ModelAndView对象 在仍然提供要呈现的ModelAndView的情况下,如何在控制器中触发回滚?异常是适当的路径。春天也可以。这可能就是您想要做的。首先,我不认为在控制器方法上使用@Transaction是一件好事。最好将事务逻辑保留在“服务层”中,并在那里使用@Transaction注释

我有一个用
@Transaction
注释的Spring MVC控制器,在某些输入下,我需要回滚事务

据我所知,触发回滚的正确方法是从控制器抛出异常

但是如果我从控制器抛出异常,我就没有机会从控制器返回
ModelAndView
对象


在仍然提供要呈现的
ModelAndView
的情况下,如何在控制器中触发回滚?

异常是适当的路径。春天也可以。这可能就是您想要做的。

首先,我不认为在控制器方法上使用
@Transaction
是一件好事。最好将事务逻辑保留在“服务层”中,并在那里使用
@Transaction
注释


但是,如果您仍然想在控制器上使用
@Transaction
,请查看
org.springframework.web.servlet.handler.SimpleMappingExceptionResolver

,恐怕这就是答案。因为我希望我的ModelAndView构造逻辑存在于控制器中,所以我认为我需要定义一个可以存储ModelAndView的自定义异常类,以及一个自定义的
HandlerExceptionResolver
来呈现它。似乎有些东西属于Spring本身。事实证明,Spring本身也有类似的东西:欢迎来到StackOverflow!有时控制器需要进行多个原子调用,例如,
User=userService.getByUsername(…)
user.updateEmailAddr(…)
user.updateTelephone(…)
<代码>用户。订阅英语(…)。必须创建一个像
UserService.updateeMailAddRandTelephoneandSubscribeTomailGlistByUserName这样的服务方法,这样控制器就不必是事务性的,这似乎很愚蠢。我认为这一点都不愚蠢。如果必须编写代码,为什么不将其封装在服务中而不是控制器中?另一个好处是,您可以轻松地在服务测试中测试它,而不用担心控制器。