私が取り組んでいるアプリでは、Room データベースから非常に単純にデータを取得する必要があります。関連する関係があります。を返す単純なクエリですべてが完全に機能していましLiveData
たが、取得する必要があるデータのサイズが予想よりもはるかに大きくなり、ブロブ (画像) も含まれているため、クエリが非常に遅くなる可能性があります。次のように実装された Paging ライブラリを使用することにしましたが、何らかの理由で@relation
注釈が機能しなくなりました。
フェッチされたエンティティは DTO であり、基本的に次のようになります。
data class EntityOtherAnotherDTO(
var id: Long? = null,
var name: String? = null,
...,
@Relation(parentColumn = "id", entityColumn = "entity_id", entity = OtherEntity::class)
var others: List<OtherEntity>,
@Relation(parentColumn = "id", entityColumn = "entity_id", entity = AnotherEntity::class)
var anothers: List<AnotherEntity>
)
クエリ:
@Query("SELECT * FROM other
JOIN entity ON entity.id = other.entity_id
JOIN another ON entity.id = another.entity_id
WHERE entity.deleted = 0
ORDER BY
CASE WHEN other.some_column IS NULL THEN 1 ELSE 0 END,
other.some_column ASC,
entity.some_other_column DESC")
fun getAllEntityOtherAnotherDTOs(): DataSource.Factory<Int, EntityOtherAnotherDTO>
クエリが次のような場合:fun getAllEntityOtherAnotherDTOs(): LiveData<List<EntityOtherAnotherDTO>>
すべてが正常に機能しました。結果は必要に応じて並べ替えられ、 で注釈が付けられたリストを含むすべてのデータが取得されました@relation
。しかし、戻り値の型を変更し、DataSource.Factory
もちろんページング アダプターを実装した後、リレーションは空を返します。
順序付けは引き続き完全に機能し、クエリは以前とまったく同じように機能しているように見えます。ページングも機能しますが、データが欠落しているだけです。entity
テーブル内のすべての列name
(some_other_column
など) はそこにありますが、関係は唯一の主要な問題です。
(関連性がある場合は、ページングの実装に関する詳細を提供できます。)