【发布时间】:2017-01-07 08:47:10
【问题描述】:
在 Spring 4 MVC 应用程序中,我注意到 @Transactional 注释用于控制器层。但在很多地方建议在服务层(服务实现类)内使用。
在@Controller 类中使用@Transactional 有什么好处?
另外,我有一个服务层实现类,它将数据更新到数据库,我注意到事务属性的用法如下
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
readOnly = true,当方法使用从数据库中查找或获取一些数据时使用。 但是使用 readOnly = true,服务层无论如何都能够保存数据。 我的应用程序使用 Spring 4 + Hibernate 4.2.20。
应用程序使用的事务管理器
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory" />
</bean>
在事务中使用“readOnly = true”就能将数据保存到数据库?
【问题讨论】:
-
您确定数据保存正确吗?如果您使用休眠并将@Transaction 设置为只读,则很可能不会发生写入,因为它禁用了刷新到数据库的语句(FlushMode 设置为 NEVER)。但是你不会有任何错误。
-
一些 JDBC 驱动忽略只读模式。
-
是的。最重要的是,只读弹簧事务期间写入的确切行为非常依赖于使用的堆栈,因此您不应该依赖它。有关此问题的更深入了解,请参阅本文ibm.com/developerworks/library/j-ts1
-
我从来没有遇到过使用它保存数据的问题
标签: java hibernate spring-mvc transactions spring-transactions