Как получить связанные LiveData в комнате LiveData? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть несколько связанных таблиц (объектов):

@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?

...