公式文書には次のように記載されています:
It is recommended to have multiple Dao classes in your codebase depending on the tables they touch.
そして、そのようなTransactionアノテーションでメソッドをマークすることができます:
@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つにマージする必要がありますか、それともより良い方法がありますか?
RoomDatabase.runInTransaction(...) を使用できます
何かのようなもの:
database.runInTransaction(new Runnable(){
@Override
public void run(){
Access all your daos here
}
});