【发布时间】:2019-08-06 17:17:24
【问题描述】:
Room 在@Transaction 中是否默认使用回滚?
它是否只取消@Transaction 内的下一个查询而不回滚?
它对错误的实际作用是什么?
【问题讨论】:
标签: android android-room android-jetpack
Room 在@Transaction 中是否默认使用回滚?
它是否只取消@Transaction 内的下一个查询而不回滚?
它对错误的实际作用是什么?
【问题讨论】:
标签: android android-room android-jetpack
我假设您指的是带有 @Transaction 注释的已实现方法,例如:
@Transaction
public void transferMoney(String accountA, String accountB, int amount) {
updateMoney(accountA, -amount);
updateMoney(accountB, +amount);
}
Room 在@Transaction 中是否默认使用回滚?
是的,如果在带有 @Transaction 注释的方法中抛出异常,那么 Room 将执行 ROLLBACK TRANSACTION
它是否只取消@Transaction 中的下一个查询而不回滚?
它取消该方法中的每个后续查询,并将该方法中任何其他查询所做的任何更改回滚到故障点。
它对错误的实际作用是什么?
它回滚事务。
如果你指的是@Query注解的方法也用@Transaction注解,那么这些是只读查询,所以实际上没有什么可以回滚,但是,当结果数据很大或返回数据时有一个@Relation 那么数据是有保证的。见:https://developer.android.com/reference/android/arch/persistence/room/Transaction
【讨论】: