首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rails中强制提交嵌套事务(4.2)

问如何在rails中强制提交嵌套事务(4.2)
EN

Stack Overflow用户
提问于 2021-08-04 20:54:17
回答 1查看 131关注 0票数 0

我有嵌套事务的例子。在Aclass call方法中,我在事务块中调用BClass call方法。现在,在Bclass call中,直到Aclass call方法事务块完全执行后,方法才会提交事务。

如何强制Bclass call方法提交事务。

代码语言:javascript
复制
class Aclass 
  def call 
    ActiveRecord::Base.transaction do 
      Bclass.call()  
      # other logic to  save some record 
    end 

    #publish event to Rabbit Queue 
    publish
  end   


class Bclass 
  def call 
    ActiveRecord::Base.transaction do 
      # save some record in.
    end

    #publish some event to rabbit queue
    publish 
  end
end 
EN

回答 1

Stack Overflow用户

发布于 2021-08-05 09:01:16

最常用的数据库管理系统(包括MariaDB、MySQL、PostgreSQL)本身不支持嵌套事务。也就是说:数据库不支持你想要做的事情。

Rails使用SAVEPOINT模拟嵌套事务的某些方面(特别是回滚能力),SAVEPOINT充当事务中的快照。有了这些,您可以将事务的状态回滚到以前的某个保存点。但是,它们不允许在实际的“最外层”事务实际提交之前提交某些更改。只有这个最外层的事务可以实际提交更改,然后这些更改对其他并发事务可见。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68657925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档