web-dev-qa-db-ja.com

ルーム削除クエリはデータベースの行を削除しません

@Queryを使用してRoomデータベースの行を削除していますが、レコードを削除できません。これが@Daoからの私のクエリです

@Dao
public interface NoteDao {

    @Insert
    void insert(final Note note);

    @Update
    void update(final Note note);

    @Query("DELETE FROM notes WHERE uid = :noteId")
    int delete(final int noteId);

    @Query("SELECT * FROM notes")
    LiveData<List<Note>> selectAll();
}

エンティティークラス

@Entity(tableName = "notes")
public class Note {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    @Expose(serialize = false, deserialize = false)
    private int mId;
    @ColumnInfo(name = "uid")
    @SerializedName("id")
    private int mUid;
    @ColumnInfo(name = "text")
    @SerializedName("text")
    private String mText;

    public Note() {
    }

    getters and setters ommited

}

誰かが私にアドバイスをしてもらえますか、私が間違っていることは何ですか?

7
Martin

この方法で@Queryを使用してみてください。

 @Query("DELETE FROM notes WHERE uid = :arg0")
 int delete(final int noteId);

上記の行のコードでは、arg0が関数delete()に渡される最初の引数です。

2
hetsgandhi

@Deleteアノテーションを使用でき、Deleteメソッドのすべてのパラメーターは、Entityまたはそのコレクション/配列でアノテーションが付けられたクラスでなければなりません。

あなたの場合、@ Delete int delete(Note note)または

@Delete int delete(注...注)

1
user2612398

次のような削除クエリを使用します。

@Query("Delete FROM Orders where quote_no LIKE  :quote_no")
void deleteOrderById(String quote_no);

ここで、 "quote_no"は行を削除するデータベース内の一意の値で、 "Orders"はテーブル名です。

1
Deepak Rana