Android Room:带嵌套 DAO 的 DAO
Android Room: DAOs with nested DAOs
有没有办法使用 Android Room Persistence Library 将 DAO 添加为其他 DAO 的依赖项,也许是使用 Dagger2?我试图避免在使用事务对多个表进行操作的 DAO class 中发生方法爆炸。
这就是我想要完成的。
示例:FooBarRepository.class
@Dao
public abstract class FooBarRepository {
// THESE ARE DAOs ADDED AS DEPENDENCIES
FooRepository fooRepository;
BarRepository barRepository;
...
@Transaction
public void insertOrUpdateInTransaction(FooBar... foobars) {
for (FooBar item : foobars) {
fooRepository.insertOrUpdateInTransaction(item.getFoo());
barRepository.insertOrUpdateInTransaction(item.getBar());
}
}
}
终于找到解决方案:
@Dao
public abstract class Repository {
private final TaskRepository taskRepository;
private final ResourceRepository resourceRepository;
public Repository(AppDatabase database) {
this.taskRepository = database.getTaskRepository();
this.resourceRepository = database.getResourceRepository();
}
...
这是允许的,因为一个 dao 对象 can take the database as a constructor parameter。
有没有办法使用 Android Room Persistence Library 将 DAO 添加为其他 DAO 的依赖项,也许是使用 Dagger2?我试图避免在使用事务对多个表进行操作的 DAO class 中发生方法爆炸。
这就是我想要完成的。
示例:FooBarRepository.class
@Dao
public abstract class FooBarRepository {
// THESE ARE DAOs ADDED AS DEPENDENCIES
FooRepository fooRepository;
BarRepository barRepository;
...
@Transaction
public void insertOrUpdateInTransaction(FooBar... foobars) {
for (FooBar item : foobars) {
fooRepository.insertOrUpdateInTransaction(item.getFoo());
barRepository.insertOrUpdateInTransaction(item.getBar());
}
}
}
终于找到解决方案:
@Dao
public abstract class Repository {
private final TaskRepository taskRepository;
private final ResourceRepository resourceRepository;
public Repository(AppDatabase database) {
this.taskRepository = database.getTaskRepository();
this.resourceRepository = database.getResourceRepository();
}
...
这是允许的,因为一个 dao 对象 can take the database as a constructor parameter。