Перечислите собак с именами их владельцев, используя LiveData, Room и One-to-many Relation
Я хочу перечислить собак в RecylerView. У каждой собаки есть отношения "один ко многим" со своим хозяином. Таким образом, сущности будут:
Владелец
@Entity
@TypeConverters(GithubTypeConverters::class)
class Owner(
@PrimaryKey(autoGenerate = false)
@field:SerializedName("id")
@field:Expose
var id: Int,
@field:SerializedName(value = "name")
var name: String)
Собака Entity
@Entity
@TypeConverters(GithubTypeConverters::class)
class Dog(
@PrimaryKey(autoGenerate = false)
@field:SerializedName("id")
@field:Expose
var id: Int,
@field:SerializedName(value = "ownerId")
var ownerId: Int,
@field:SerializedName(value = "name")
var name: String)
Для каждого субъекта у меня есть DAO
Владелец ДАО
@Dao
abstract class OwnerDao {
@Query("SELECT * FROM Owner")
abstract fun findAll(): LiveData<List<Owner>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun inserOwners(ownersList: List<Owner>)
}
Дог ДАО
@Dao
abstract class DogDao {
@Query("SELECT * FROM Dog")
abstract fun findAll(): LiveData<List<Dog>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insertDogs(dogssList: List<Dog>)
}
Что мне нужно? Создайте список собак и для каждой строки отобразите имя собаки и имя владельца.
У меня уже есть адаптер и LiveData (я не публикую здесь этот код, потому что вопрос не связан с этим)
- Если я создаю LiveData, используя DogDAO, я могу отобразить имя собаки, но не имя владельца.
- Если я создаю LiveData, используя OwnerDAO, я могу отобразить имя владельца, но не имя собаки.
Я читал, но там не так много информации.
Я следовал этому уроку: Отношение (Комната), что решение состоит в том, чтобы получить пользователя со списком домашних животных (мне нужно прямо противоположное), и я думаю, что это не очень хорошо объяснено.
Я думаю, я должен создать собственный Дао. Но решение, которое я попробовал, не сработало.
Не могли бы вы мне помочь?
Спасибо!