У меня есть ситуация, когда я хочу вставить данные в таблицы Master (store_master) и Mapping (store_mapping) в отношении один-ко-многим, используя библиотеку постоянства Room. Моя реализация ниже:
@Entity(tableName = "store_master")
class Store {
@PrimaryKey(autoGenerate = true)
public var store_id: Int = 0
@SerializedName("name")
lateinit var store_name: String
}
@Entity(tableName = "store_mapping", foreignKeys = arrayOf(
ForeignKey(entity = Store::class,
parentColumns = arrayOf("store_id"),
childColumns = arrayOf("pic_id"),
onDelete = CASCADE)))
class StorePicture(@field:PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id") var id: Int,
@SerializedName("pic_id") var pic_id: Int?,
@SerializedName("image") var storage_picture: String?)
class StoreWithPictures {
@Embedded
var store: Store? = null
@Relation(parentColumn = "store_id",
entityColumn = "pic_id")
var pictures: List<StorePicture> = ArrayList()
}
Для получения Store with Pictures моя реализация ниже:
@Transaction
@Query("SELECT * FROM store_master ORDER BY store_master.storage_id DESC")
fun loadAll(): List<StoreWithPictures>
Приведенный выше подход прекрасно работает для извлечения данных из главной таблицы и таблицы сопоставления, но я не могу вставить их таким же образом (т. Е. Используя аннотации @Embeded и @transaction).