【问题标题】:Does a transaction with propogation reqiures new can update a object which locked by another transaction?具有传播的事务是否需要新的可以更新被另一个事务锁定的对象?
【发布时间】:2017-03-20 13:52:56
【问题描述】:
@Transactional("transaction1")
public void A(){
    Actor actor = selectForUpdate(id);
    testService.B(actor);
}

@Transactional("transaction1",propagation = Propagation.REQUIRES_NEW)
public void B(Actor actor){
  update(actor);
}

方法A锁定actor并调用方法B,方法B开始事务传播需要new。我想知道我是否可以更新方法B中的actor。

【问题讨论】:

  • 从逻辑上讲,即使您创建了一个新事务,您也不能这样做,因为该行已被 selectForUpdate 锁定。

标签: java mybatis spring-transactions


【解决方案1】:

不,它不允许您使用 Propagation.REQUIRES_NEW 进行更新。 但是,如果你想实现这个功能,你可以这样做:

@Transactional("transaction1",propagation = Propagation.REQUIRED)
public void B(Actor actor){
  update(actor);
}

阅读spring事务文档: http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2021-08-12
    • 2013-09-07
    • 2012-05-04
    相关资源
    最近更新 更多