La documentation officielle indique que:
It is recommended to have multiple Dao classes in your codebase depending on the tables they touch.
et que l'on peut marquer une méthode avec l'annotation Transaction comme ça:
@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);
}
}
Mais que se passe-t-il si une transaction couvre plusieurs DAO? Dois-je fusionner tous les DAO en un seul pour prendre en charge les transactions, ou existe-t-il une meilleure façon de le faire?
Vous pouvez utiliser RoomDatabase.runInTransaction (...)
Quelque chose comme:
database.runInTransaction(new Runnable(){
@Override
public void run(){
Access all your daos here
}
});