房间查询一对多关系

Room querying one to many relationship

我们如何查询与 Room 具有一对多关系的所有实体?

假设我们有一个 用户实体:

@Entity
class User(@PrimaryKey(autoGenerate = true) var id: Long?, var name: String)

和一个宠物实体

@Entity(foreignKeys = [(ForeignKey(entity = User::class,
    parentColumns = ["id"],
    childColumns = ["userId"],
    onDelete = ForeignKey.CASCADE))])
public class Pet(@PrimaryKey(autoGenerate = true),
    var name: String,
    var userId: Long?,
    @Ignore var user: User?)

通常我们会这样查询所有宠物:

@Dao
interface PetsDao {
    @Query("SELECT * FROM pets")
    fun getAll(): Flowable<List<Pet>>
}

但是我们怎样才能让 User 自动附加到 Pet 对象?就像查询一样:

@Dao
interface PetsDao {
    @Query("SELECT * FROM pets p JOIN users u ON u.id = p.userId")
    fun getAllWithUser(): Flowable<List<Pet>>
}

然后我们可以使用pet.user.name而不需要单独查询用户。

您应该使用 @Embedded(资源:https://developer.android.com/reference/android/arch/persistence/room/Relation.html