我有嵌套事务的例子。在Aclass call方法中,我在事务块中调用BClass call方法。现在,在Bclass call中,直到Aclass call方法事务块完全执行后,方法才会提交事务。
如何强制Bclass call方法提交事务。
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 发布于 2021-08-05 09:01:16
最常用的数据库管理系统(包括MariaDB、MySQL、PostgreSQL)本身不支持嵌套事务。也就是说:数据库不支持你想要做的事情。
Rails使用SAVEPOINT模拟嵌套事务的某些方面(特别是回滚能力),SAVEPOINT充当事务中的快照。有了这些,您可以将事务的状态回滚到以前的某个保存点。但是,它们不允许在实际的“最外层”事务实际提交之前提交某些更改。只有这个最外层的事务可以实际提交更改,然后这些更改对其他并发事务可见。
https://stackoverflow.com/questions/68657925
复制相似问题