@Relation
がどのようになっているのか見てみましょう 動作します。 2つの段階があります:
- Roomは、
@Query
に入力したクエリを実行します ユーザーを獲得するため。いつものように、そのクエリには結合が含まれていません。このクエリは、メインテーブル(User
)に保持されているデータの部分を取得するために使用されます あなたの場合)。 - Roomはもう1つのクエリを実行します。そのためには、
@Relation
を調べます。 パラメータを設定し、次にクエリするテーブルを理解します(Record
あなたの場合)そして何がユーザーの結果との結合条件であるべきか。このクエリ作成プロセスに侵入する方法がないことが重要です。Record
にフィルターを設定することはできません たとえば、のフィールド。結果を取得するRoomは、必要な形式に変換します(Records
のリストを埋めます) 。
選択肢があります:
Records
にフィルターを設定するための関係を変更するには テーブル(ただし、リストなしでフラットなデータを取得できます)。
public class UserWithRecords {
@Embedded
protected Record record;
@Relation(
parentColumn = "user_id",
entity = User.class,
entityColumn = "id"
)
protected User user;
}
クエリを次のように変更します:
@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
-
@Relation
は使用しないでください まったく、あなたが試したような結合でクエリを書いてください。ただし、結果をコード内の必要な形式に手動で変換する必要があります(結果をループしてリストを形成します)。