У меня есть несколько связанных таблиц (объектов):
@Entity(
tableName = L.TABLE_NAME,
foreignKeys = [
ForeignKey(
entity = S::class,
parentColumns = [KeyEntity.K_ID],
childColumns = [L.K_S_ID],
onUpdate = ForeignKey.CASCADE,
onDelete = ForeignKey.CASCADE),
ForeignKey(entity = T::class,
parentColumns = [KeyEntity.K_ID],
childColumns = [L.K_T_ID],
onUpdate = ForeignKey.CASCADE,
onDelete = ForeignKey.SET_NULL
)
]
)
class L(
id: Int = INVALID_ID,
@ColumnInfo(name = K_S_ID, index = true)
var sId: Int = INVALID_ID,
@ColumnInfo(name = K_T_ID, index = true)
var tId: Int? = null
) : KeyEntity(id)
@Entity(tableName = S.TABLE_NAME)
class S(
id: Int = INVALID_ID,
/* Other fields */
) : KeyEntity(id)
@Entity(tableName = T.TABLE_NAME)
class T(
id: Int = INVALID_ID,
/* Other fields */
) : KeyEntity(id)
Мне нужно получить все L-объекты и их связанные (по внешнему ключу) S- и T-объекты для создания элементов для моего адаптера. Теперь у меня есть следующая функция:
fun fetch(): LiveData<MutableList<LAdapter.LItem>> {
return Transformations.map(db.lDao().getLs()) {
val lItems = mutableListOf<LAdapter.LItem>()
it.forEach { l ->
lItems.add(LAdapter.LItem(
s = "S text", // db.sDao().getS(l.sId)/../.name
t = "T text" // db.tDao().getT(l.tId)/../.name
))
}
lItems
}
}
Проблема в том, что getS()
и getT()
возвращают LiveData<S>
и LiveData<T>
, и я не могу понять, как объединить все эти три LiveData
вместе. И также глупо писать для каждого DAO-метода два варианта с LiveData
, а не с LiveData
.
Как правильно получить несколько связанных сущностей в комнате, когда вы используете LiveData
?