@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は使用しないでください まったく、あなたが試したような結合でクエリを書いてください。ただし、結果をコード内の必要な形式に手動で変換する必要があります(結果をループしてリストを形成します)。