1

根据我的研究,我们有两种方法可以从两个或多个表中获取相关数据。

例如,如果我们有 2 个如下表:

@Entity
public class User {
    @PrimaryKey public long userId;
    public String name;
    public int age;
}

@Entity
public class Library {
    @PrimaryKey public long libraryId;
    public long userOwnerId;
}

如果我们想加载所有数据,我们有两个选择:

1.@Embedded@Relation

通过添加此类:

public class UserAndLibrary {
    @Embedded public User user;
    @Relation(
         parentColumn = "userId",
         entityColumn = "userOwnerId"
    )
    public Library library;
}

并添加DAO方法:

@Transaction
@Query("SELECT * FROM User")
public List<UserAndLibrary> getUsersAndLibraries();

Android 文档中的更多信息

2.@DatabaseView

@DatabaseView("SELECT user.id, user.name, user.age, " +
              "library.libraryId FROM user " +
              "INNER JOIN library ON user.userId = library.libraryId)
public class UserAndLibrary {
    public long userId;
    public String name;
    public int age;
    public long libraryId;
 }

和一个关联

@Database(entities = {User.class, Library.class},
          views = {UserAndLibrary.class},
          version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

两种选择有什么区别?

4

0 回答 0