#android #relationship #android-room
#Android #отношения #android-room
Вопрос:
Я замечаю что-то странное с Room. У меня есть два объекта: вино и бутылки Бутылка принадлежит только одному вину, но у вина может быть несколько бутылок (от одной до многих)
Итак, у меня есть следующая модель:
@Entity(tableName = "wine")
data class Wine(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id_wine")
val idWine: Long = 0,
val name: String
)
@Entity(tableName = "bottle")
data class Bottle(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id_bottle")
val idBottle: Long = 0,
@ColumnInfo(name = "id_wine") val idWine: Long,
val comment: String
)
Отношение:
data class WineWithBottles (
@Embedded val wine: Wine,
@Relation(
parentColumn = "id_wine",
entityColumn = "id_bottle"
)
val bottles: List<Bottle>
)
И, наконец, в комнате базы данных выполняется предварительный обратный вызов:
private val roomCallback: Callback = object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
thread {
val bottleDao = instance?.bottleDao()
val wineDao = instance?.wineDao()
wineDao?.insertWine(Wine(1, "a"))
wineDao?.insertWine(Wine(2, "a"))
wineDao?.insertWine(Wine(3, "a"))
bottleDao?.insertBottle(Bottle(0, 1, a))
bottleDao?.insertBottle(Bottle(0, 1, b))
bottleDao?.insertBottle(Bottle(0, 1, c))
}
}
}
Я упоминаю, что я предоставляю объекты Wine и Bottles в аннотации Room @ Database
Итак, проблема в том, что когда я наблюдаю getAllBottles() : LiveData<List<Bottle>>
, я получаю все бутылки, все в порядке
Но когда я наблюдаю getWineWithBottles(): LiveData<List<WineWithBottles>>
, у меня есть одна бутылка на вино, хотя я установил id_wine для всех бутылок равным 1
У каждого объекта WineWithBottles есть вино и ОДНА бутылка в списке: [WineWithBottles(вино = Вино(idWine= 1, name = a), бутылки=[Бутылка(idBottle=1, idWine= 1, комментарий = a)]), WineWithBottles(вино= Вино(idWine= 2, name = a), бутылки =[Бутылка(idBottle=2, idWine = 1, комментарий = b)]) , WineWithBottles(вино=Вино(idWine=3, название =a), бутылки=[Бутылка(idBottle=3, idWine=1, комментарий=c)])]
Ответ №1:
Попробуйте изменить условие отношения на wine.id_wine=bottle.id_wine
:
data class WineWithBottles (
@Embedded val wine: Wine,
@Relation(
parentColumn = "id_wine",
entityColumn = "id_wine"
)
val bottles: List<Bottle>
)
Комментарии:
1. Такая глупая ошибка, я запутался с атрибутами, Спасибо, что указали на это 🙂