java - @Controller 类中的@Transactional 方法不被视为事务性的

标签 java spring spring-mvc

我注意到以下内容在标记为 @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/

相关文章:

java - Gradle:无法创建 SecurityManager

java - Spring Integration Mail - 将 XML 转换为 Java Config

Java Spring : how to run two different cronjobs simultaneously?

java - Spring MVC Controller 单元测试: How do I set private instance boolean field?

java - 静态变量和非静态变量可以同名

java - 我无法访问 tomcat 服务器(本地主机),甚至无法访问 mysql

java - ExtJS4、Spring JPA、Restful 服务、Hibernate 应用程序

spring - Spring 中的宽松绑定(bind)真的不支持 @Value 注释吗?

java - Spring-boot-test 依赖项必须手动导入,尽管它们存在于 Spring-boot-starter-parent 中 - 为什么?

java - 在 Spring MVC 应用程序属性文件中使用阿拉伯字符串