我在定義兩個物體之間的關系時遇到問題。關系是一對一的。每個設備都分配到一個房間。
設備物體:
@Entity
data class Device(
@PrimaryKey(autoGenerate = false) val ipAddress: String,
val deviceName: String,
val type: Int,
val uniqueRoomId: Int
) {
@Ignore
val status: DeviceStatus = DeviceStatus.Off
}
房間物體
@Entity
data class Room(
@PrimaryKey(autoGenerate = true) val roomId: Int,
val name: String
)
設備和房間物件:
data class DeviceAndRoom(
@Embedded val room: Room,
@Relation(
parentColumn = "roomId",
entityColumn = "uniqueRoomId",
entity = Device::class
)
val device: Device
)
設備道:
@Dao
interface DeviceDao {
@Transaction
@Query("SELECT * FROM Device")
fun getAllDeviceAndRooms(): LiveData<List<DeviceAndRoom>>
[...]
}
但我收到以下構建錯誤:
The columns returned by the query does not have the fields [roomId,name] in com.test.mytestapp.models.DeviceAndRoom even though they are annotated as non-null or primitive. Columns returned by the query: [ipAddress,deviceName,type,uniqueRoomId]
我遵循了官方的 android 指南,但還有其他文章描述了相同的程序,例如與 Room 的資料庫關系
我不知道出了什么問題。也許有人有想法。
uj5u.com熱心網友回復:
對于這種關系(房間(嵌入)與設備(關系)),您可以查詢父級:-
@Query("SELECT * FROM room")
fun getAllDeviceAndRooms(): LiveData<List<DeviceAndRoom>>
- 名稱應該是 RoomAndDevice
即它無法在設備表中找到 roomid 和 name 列,因為它們在房間表中。然后從每個檢索到的房間通過底層查詢檢索設備,沿著路線SELECT * FROM the_relationship_entity WHERE entityColumn = parentColumn以及因此@Trasnaction推薦的原因。
如果您想要帶有房間的設備,那么您可以使用:-
data class DeviceAndRoom(
@Embedded val device: Device,
@Relation(
entityColumn = "roomId",
parentColumn = "uniqueRoomId",
entity = Room::class
)
val room: Room
)
隨著 :-
@Transaction
@Query("SELECT * FROM Device")
fun getAllDeviceAndRooms(): LiveData<List<DeviceAndRoom>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332884.html
標籤:安卓 sql 数据库 科特林 android-room
