Запрос Room SQL вытаскивает один объект вместо массива - PullRequest
0 голосов
/ 04 августа 2020

У меня есть следующая функция DAO -

 @Query(
        """
        select 
        groups.groupName as groupName,
        friends.firstName as firstName,
        friends.lastName as lastName,
        groups.id as id
        from $GROUPS_TABLE as groups
        inner join $GROUP_MEMBER_TABLE as groupMembers on groups.id = groupMembers.groupId
        inner join $FRIENDS_TABLE as friends on groupMembers.userId = friends.id
        group by groups.id
        """
    )
    fun getAllGroups(): LiveData<List<GroupModel>>

и следующие модели -

//This is the joined model from the query
data class GroupModel(val id : String, val groupName: String, val firstName: String, val lastName: String) : ModelWithId {

    override fun fetchId(): String = id
}

@Entity(tableName = GROUP_MEMBER_TABLE, primaryKeys = ["userId", "groupId"])
data class GroupMemberModel(val userId : String, val groupId : String)

@Entity(tableName = GROUPS_TABLE, primaryKeys = ["id"])
data class GroupEntity(
    val id: String = UUID.randomUUID().toString(), val groupName: String
) : ModelWithId {
    override fun fetchId() = id
}

@Entity(tableName = FRIENDS_TABLE, primaryKeys = ["id"])
data class UserModel(val id: String = "", val firstName: String = "", val lastName: String = "") : ModelWithId {

    val fullName
        get() = firstName
            .plus(" ")
            .plus(lastName)

    override fun fetchId(): String = id
}

Моя проблема заключается в следующем -

Я хочу получить объект group для заполнения держателя просмотра.

В этом держателе просмотра, который я хочу иметь -

Имя группы - я получаю его из таблицы групп. Члены - мне нужно go в GroupMemberTable, получить UserId каждого члена группы, используя это, мне нужно go в UserTable и получить имя + фамилию

Что в настоящее время происходит, когда я запускаю приложение, так это то, что каждая группа, имеющая более одного члена в он не будет отображать всех членов, он будет отображать только первый из них в алфавитном порядке c.

Я могу удалить group by groups.id в конце, но теперь он даст мне ту же группу, что и много раз, когда члены находятся внутри нее, каждое дублирование содержит только одного члена.

Конечно, оба решения не подходят, и мне нужна одна группа со списком всех членов.

...