跨DAO的Android Room交易

时间:2018-01-09 08:24:02

标签: android sqlite persistence dao android-room

官方文件指出:

It is recommended to have multiple Dao classes in your codebase depending on the tables they touch.

并且可以使用事务注释标记一个方法:

 @Dao
 public abstract class ProductDao {
    @Insert
     public abstract void insert(Product product);
    @Delete
     public abstract void delete(Product product);
    @Transaction
     public void insertAndDeleteInTransaction(Product newProduct, Product oldProduct) {
         // Anything inside this method runs in a single transaction.
         insert(newProduct);
         delete(oldProduct);
     }
 }

但是如果一个事务跨越多个DAO怎么办?我应该将所有DAO合并为一个只是为了支持交易,还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:16)

您可以使用RoomDatabase.runInTransaction(...)

类似的东西:

database.runInTransaction(new Runnable(){
  @Override
  public void run(){
    Access all your daos here
  }
});