我在 Android 中为我的数据库使用 Room,我也在使用 @Relation(基于此:https ://developer.android.com/reference/android/arch/persistence/room/Relation.html )从关系中获取数据与 ForeinKey 一对多关联的实体。我想要得到的是一个使用@Relation 的 RoomArea 实体的带有 roomAreaNames 的列表。该代码没有编译错误,问题是我只从@Relation 返回的是一个大小为 1 的列表(只有表中的第一个对象)而不是完整列表。
表:
@Entity(
tableName = "buildings_table",
indices = [Index("contract_id")],
foreignKeys = [
ForeignKey(
entity = Contract::class,
parentColumns = ["contract_id"],
childColumns = ["contract_id"],
onDelete = ForeignKey.CASCADE)]
)
data class Building(
@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "building_id")
val buildingId: Long = 0L,
@ColumnInfo(name = "contract_id")
val contractId: Long,
@ColumnInfo(name = "building_name")
val buildingName: String)
@Entity(
tableName = "floors_table",
indices = [Index("building_id")],
foreignKeys = [
ForeignKey(
entity = Building::class,
parentColumns = ["building_id"],
childColumns = ["building_id"],
onDelete = ForeignKey.CASCADE)]
)
data class Floor(
@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "floor_id")
val floor_id: Long = 0L,
@ColumnInfo(name = "building_id")
val buildingId: Long,
@ColumnInfo(name = "level")
val level: Int
)
@Entity(
tableName = "rooms_area_table",
indices = [Index("floor_id")],
foreignKeys = [
ForeignKey(
entity = Floor::class,
parentColumns = ["floor_id"],
childColumns = ["floor_id"],
onDelete = ForeignKey.CASCADE)]
)
data class RoomArea(
@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "room_area_id")
val roomAreaId: Long = 0L,
@ColumnInfo(name = "floor_id")
val floorId: Long,
@ColumnInfo(name = "room_area_name")
val roomAreaName: String
)
道查询:
@Transaction
@Query("SELECT * FROM buildings_table WHERE contract_id = :contractId")
fun getItemsAuditBuilding(contractId: Long): LiveData<List<ItemAuditBuilding>>
这是@Relation(只给我一个大小为 1 的列表)我需要与 buildingId 相关的所有房间区域
data class ItemAuditBuilding(
@Embedded val building: Building,
@Relation(
parentColumn = "building_id",
entityColumn = "room_area_id",
entity = RoomArea::class,
projection = ["room_area_name"]
)
var roomAreas: List<String>
)
谢谢你。