У меня есть следующая функция 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
в конце, но теперь он даст мне ту же группу, что и много раз, когда члены находятся внутри нее, каждое дублирование содержит только одного члена.
Конечно, оба решения не подходят, и мне нужна одна группа со списком всех членов.