Android Room:带有嵌套 DAO 的 DAO

Boh*_*sen 9 android android-room

有没有办法使用 Android Room Persistence Library 将 DAO 添加为其他 DAO 中的依赖项,也许是使用 Dagger2?我试图避免使用事务对多个表进行操作的 DAO 类中的方法爆炸。

这就是我正在努力实现的目标。

示例: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());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*sen 12

终于找到了解决办法:

@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();
    }
...
Run Code Online (Sandbox Code Playgroud)

这是允许的,因为 dao 对象可以将数据库作为构造函数参数