在Room中,可以使用实体类之间的关系注释(@Relation)来表示表之间的关系。如果表中具有自动生成的键,则可以使用@Foreign key注释来引用关联实体类中的键。
例如,假设我们有两个实体类,Book和Library,它们之间具有一对多关系。每个图书馆都有一个唯一的自动生成的键(libraryId),每本书都有一个自动生成的id和一个外键(libraryId指向其所属的图书馆)
@Entity
class Library{
@PrimaryKey(autoGenerate = true)
var libraryId: Int = 0
}
@Entity(foreignKeys = [ForeignKey(entity = Library::class, parentColumns = ["libraryId"], childColumns = ["libraryId"], onDelete = ForeignKey.CASCADE)])
data class Book(
@PrimaryKey(autoGenerate = true)
var id: Long = 0,
var title: String,
var author: String,
var libraryId: Long
)
然后,在BookDao接口中声明一个带有关系注释的查询方法,该方法返回具有自动生成的键的Library和Book实体之间的关系:
data class LibraryWithBooks(
@Embedded val library: Library,
@Relation(
parentColumn = "libraryId",
entityColumn = "libraryId"
)
val books: List
)
@Dao
interface BookDao {
@Transaction
@Query("SELECT * FROM Library")
fun getLibrariesWithBooks(): List
}
此查询将返回LibraryWithBooks列表,其中每个对象都包含一个Library实例和附加到该库的Book列表。
上一篇:表之间关系冲突
下一篇:表之间是否仍需关联关系?