网站首页 网站导航 课程中心
新闻中心
您所在的位置:Java培训 > 新闻中心 > 中软卓越Java培训:Spring事务嵌套的配置方法

中软卓越Java培训:Spring事务嵌套的配置方法

来源:中软卓越 日期:2016-12-23 10:05 人气:
  Java培训专家指出,在使用Spring管理Service层事务时,会遇到Service方法事务嵌套的问题。当出现事务无法回滚的情况,我们可以用一种自动的方式来完成回滚。中软卓越Java培训专家解答Spring事物嵌套的配制方法。
Spring的事务传递机制
  PROPAGATION_REQUIRED 如果当前已经存在一个事物,那么就加入到这个事务中,如果当前没有事物那么久新建一个事物。这是最常见的选择。
  PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
  PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
  PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
  PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
  PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。
  事务传递机制,有PROPAGATION_NESTED机制。
  当我们在Service方法中配置了这个方式
  @Transactional(propagation=Propagation.NESTED)
  public void save(Entity entity) {
  //保存实体对象操作
  }
  运行之后系统异常, 提示当前配置不支持NESTED事务.
  如何解决呢?
  HibernateTransactionManager中有isNestedTransactionAllowed的判定。
  protected Object doGetTransaction() {
  HibernateTransactionObject txObject = new HibernateTransactionObject();
  txObject.setSavepointAllowed(isNestedTransactionAllowed());
  //...
  }
  所以在Hibernate配置中添加nestedTransactionAllowed的配置
  <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
  <property name="nestedTransactionAllowed" value="true"/>
  </bean>
  然后所有的事务都自动使用嵌套事务了,也不需要修改任何service的代码和配置,可以在service方法上去掉(propagation=Propagation.NESTED)这段。
  以上就是中软卓越Java培训专家为大家提供的Spring事物嵌套的配制方法,大家都学会了吗?更多资讯敬请关注中软卓越,关注官方微信最新资讯,一手获取。

营业执照 版权所有©Copyright 2008-2017,北京中软国际教育科技股份有限公司, All Rights Reserved. ICP备案号:京ICP备14058756号-2

| | 分类导航 | 关于我们