我注意到以下内容在标记为 @Controller
的类中不起作用:
@Autowired
SessionFactory sessionFactory;
@ResponseBody
@Transactional
@RequestMapping(method = RequestMethod.GET , value = "/map")
public ArrayList<PhotoDTO> getPhotos(...someParams) {
Entity result sessionFactory.getCurrentSession()... //do some manipulation
return result;
}
当我调用该 URL 时,我收到一条错误消息,指出该方法不是事务性的(尽管如您所见,它被标记为一个)
如果我将此方法复制到另一个名为 MyService 的类并改为从 Controller 调用它,它会完美运行
这是某种 Spring 建议(让我或多或少使用更多类的阴谋)吗?
最佳答案
不要在您的 Controller 中执行事务。将它们放在您的服务层类中。
将您的代码分离到模型- View - Controller 中。
是的,这是一个阴谋。它使您能够在 Controller / View 之间共享代码而无需重复代码。并且还停止不必要的事务回滚(对于与实际事务无关的异常)。
一开始似乎需要更多代码,但从长远来看,它更易于管理且开发起来更简单。
关于java - @Controller 类中的@Transactional 方法不被视为事务性的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616410/