我有一个嵌套事务示例,从Aclass#call
方法开始,我在事务块内调用BClass#call
方法,现在在Bclass call
方法中,直到事务块Aclass call
方法完全执行后才提交事务
如何强制Bclass#call
方法提交事务。
class Aclass
def call
ActiveRecord::Base.transaction do
Bclass.new.call()
# other logic to save some record
end
#publish event to Rabbit Queue
publish
end
end
class Bclass
def call
ActiveRecord::Base.transaction do
# save some record in.
end
#publish some event to rabbit queue
publish
end
end
1条答案
按热度按时间zpf6vheq1#
大多数常用的DBMS(包括MariaDB、MySQL、PostgreSQL)本身不支持嵌套事务,即:数据库不支持您要执行的操作。
Rails模拟嵌套事务的某些方面(特别是回退的能力),它在事务处理中充当快照。使用这些快照,可以将事务处理的状态回退到以前的某个保存点。但是,它们不允许在实际的“最外层”事务实际提交之前提交某些更改。大多数事务实际上可以提交对其他并发事务可见更改。