在@Transaction
中,Room是否默认使用回滚?
是否只取消@Transaction
内的下一个查询而不回滚?
发生错误时实际上会做什么?
答案 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