【发布时间】:2018-03-27 13:33:07
【问题描述】:
我们如何查询所有实体及其与 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 而无需单独查询用户。
【问题讨论】:
标签: android kotlin android-room