【发布时间】:2020-12-11 23:41:27
【问题描述】:
Room 允许您使用仅包含这些列的 POJO 查询特定列。 (顺便说一句,如果属性名与列名匹配,@ColumnInfo 是必要的吗?)
文档示例:
data class NameTuple(
@ColumnInfo(name = "first_name") val firstName: String?,
@ColumnInfo(name = "last_name") val lastName: String?
)
// In DAO:
@Query("SELECT first_name, last_name FROM user")
fun loadFullName(): List<NameTuple>
在进行一对多查询时,有没有办法从依赖实体中仅选择一部分列?文档中的所有关系示例都显示了将实体类组合成一个 POJO 链接实体类的 POJO,但不是像上面那样的非实体元组之一。
如何告诉它在@Transaction 的第二个隐式查询中选择哪些列?
我什至不知道从哪里开始设置,也不知道查询代码是什么。举例来说,假设您有一个 Person 表和 Pet 表,并且您希望能够获取所有带有宠物名称的 Person 流,但没有其他宠物数据。
@Entity
data class Person(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val name: String = ""
)
@Entity
data class Pet(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val ownerId: Int = 0,
val name: String = "",
val animalType: String = "",
val birthdate: Long = 0
)
// ...
data class PetName (
@ColumnInfo(name = "id") val id: Int = 0,
@ColumnInfo(name = "name") val name: String = ""
)
PersonWithPetsNames {
@Embedded val person: Person,
@Relation(parentColumn = "id", entityColumn = "ownerId", entity = Pet::class)
val pets: List<PetName>
}
// in DAO:
@Transaction
@Query("SELECT * FROM Person ...???")
fun getPeopleWithPetNames(): Flow<List<PersonWithPetsNames>>
【问题讨论】:
标签: java android kotlin android-room