1. ホーム
  2. android

[解決済み] アンドロイドルームでエンティティの特定フィールドを更新する

2022-05-01 03:56:52

質問

私は新しいプロジェクトでandroid room persistence libraryを使用しています。 私はテーブルのいくつかのフィールドを更新したいと思います。 私は私のように試してみました Dao -

// Method 1:

@Dao
public interface TourDao {
    @Update
    int updateTour(Tour tour);
}

しかし、このメソッドを使用して更新しようとすると、ツアーオブジェクトの主キー値と一致するエンティティのすべてのフィールドが更新されます。 私は @Query

// Method 2:

@Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid")
int updateTour(long tid, String end_address);

これは動作していますが、私の場合、エンティティに多くのフィールドがあるため、多くのクエリーが発生します。私は(すべてではない)いくつかのフィールドを更新する方法を知りたいのです。 Method 1 ここで id = 1; (id は自動生成の主キーです)。

// Entity:

@Entity
public class Tour {
    @PrimaryKey(autoGenerate = true)
    public long id;
    private String startAddress;
    private String endAddress;
    //constructor, getter and setter
}

解決方法は?

<ブロッククオート

私はメソッド1のようにいくつかのフィールド(すべてではない)を更新することができますどのように知りたい id = 1

使用方法 @Query 方法2で行ったように

<ブロッククオート

は、私の場合、エンティティに多くのフィールドがあるため、長すぎるクエリです。

それなら、もっと小さなエンティティにしましょう。あるいは、フィールドを個別に更新するのではなく、データベースとより粗い粒度のインタラクションを持つようにします。

<ストライク つまり、Room自体には、あなたの求めるものは何もないのです。

更新日 2020-09-15 : Room は部分エンティティをサポートするようになり、このシナリオを支援することができるようになりました。参照 この回答 をご覧ください。