房间交易回滚或取消

时间:2019-08-06 17:17:24

标签: android android-room android-jetpack

@Transaction中,Room是否默认使用回滚?

是否只取消@Transaction内的下一个查询而不回滚?

发生错误时实际上会做什么?

1 个答案:

答案 0 :(得分:1)

我假设您指的是用@Transaction注释的已实现方法,例如:

@Transaction
public void transferMoney(String accountA, String accountB, int amount) {
  updateMoney(accountA, -amount);
  updateMoney(accountB, +amount);
}
  

在@Transaction中,Room是否默认使用回滚?

是的,如果在用@Transaction注释的方法中引发了异常,则Room将执行ROLLBACK TRANSACTION

  

是否只取消@Transaction中的下一个查询而不回滚?

它将取消该方法中的每个后续查询,并回滚该方法中的任何其他查询所做的任何更改,直到失败为止。

  

发生错误时实际上会做什么?

它回滚事务。


如果您引用的是带有@Query注释的@Transaction注释方法,则这些方法是只读查询,因此,当结果数据很大时,实际上没有任何回滚的内容。或返回的数据具有@Relation,则可以保证数据。参见:https://developer.android.com/reference/android/arch/persistence/room/Transaction