官方文件指出:
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合并为一个只是为了支持交易,还是有更好的方法来做到这一点?
答案 0 :(得分:16)
您可以使用RoomDatabase.runInTransaction(...)
类似的东西:
database.runInTransaction(new Runnable(){
@Override
public void run(){
Access all your daos here
}
});