Перечислите собак с именами их владельцев, используя 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, я могу отобразить имя владельца, но не имя собаки.

Я читал, но там не так много информации.

Я следовал этому уроку: Отношение (Комната), что решение состоит в том, чтобы получить пользователя со списком домашних животных (мне нужно прямо противоположное), и я думаю, что это не очень хорошо объяснено.

Я думаю, я должен создать собственный Дао. Но решение, которое я попробовал, не сработало.

Не могли бы вы мне помочь?

Спасибо!

0 ответов