web-dev-qa-db-fra.com

Android Transactions de salle entre les DAO

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?

25
Alessandro

Vous pouvez utiliser RoomDatabase.runInTransaction (...)

Quelque chose comme:

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