在 Android Room 中实现对象之间的多对多关系需要借助中间表,并使用 @Relation 标注进行映射。下面提供一个示例,其中有两个对象(实体):Book 和 Author。
Book.java
@Entity(tableName = "books") public class Book { @PrimaryKey public long id; public String title; }
Author.java
@Entity(tableName = "authors") public class Author { @PrimaryKey public long id; public String name; }
要创建多对多关系,需要一个中间表,用于关联 Book 和 Author。这个表的结构如下:
@Entity(tableName = "book_author_join", primaryKeys = {"bookId", "authorId"}, foreignKeys = { @ForeignKey(entity = Book.class, parentColumns = "id", childColumns = "bookId"), @ForeignKey(entity = Author.class, parentColumns = "id", childColumns = "authorId") }) public class BookAuthorJoin { public long bookId; public long authorId; }
在这个示例中,@Entity 标注中的 primaryKeys 用于指定该表需要哪些列作为主键。foreignKeys 用于指定该表与其他表之间的外键关系。
有了中间表,接下来就可以在实体类中定义多对多的关系了。重要的是,需要使用 @Relation 标注来映射中间表:
BookWithAuthors.java
public class BookWithAuthors {
@Embedded public Book book;
@Relation(
parentColumn = "id",
entityColumn = "id",
associateBy = @Junction(BookAuthorJoin.class)
)
public List
这个类中包含一个 Book 实例和一个具有 @Relation 标注的 List