0

私が取り組んでいるアプリでは、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など) はそこにありますが、関係は唯一の主要な問題です。

(関連性がある場合は、ページングの実装に関する詳細を提供できます。)

4

1 に答える 1