web-dev-qa-db-ja.com

Android RoomsORMの@ForeignKeyに基づくカスケード削除

2つのエンティティDBList adnd DBListContentがあります。 DBListDBListContentの間には1対多の関係があります。

これがDBListクラスです

@Entity(tableName = "lists")
public class DBList {
    @PrimaryKey
    private String listId;
    private String title;
    private String createdDateTime;
}

これがDBListContentです

@Entity(tableName = "listContents")
public class DBListContent {
    @PrimaryKey
    public String listContentId;
    public String content;
    public String lastEditedBy;
    public String lastEditedDateTime;

    @ForeignKey(entity = DBList.class, parentColumns = "listId", childColumns = "dbListId", onDelete = CASCADE)
    public String dbListId;
}

listsテーブルの行を削除しても、listContentsテーブルの対応する行は削除されません。

次のDaoメソッドを使用して行を削除しました

@Delete
void deleteLists(List<DBList> dbLists);

@Query("delete from lists")
void deleteLists();

私はかなり明白な何かが欠けていることを知っています。これで私を導いてください。

10
Giridhar Karnik

あなたの質問に答えるのに遅すぎるかどうかはわかりませんが、あなたが持っている間違いは、フィールドに@ForeignKeyを入力することです。

@ForeignKeysはテーブル宣言に入れなければなりません。

コードは次のようになります。

@Entity(tableName = "listContents",foreignKeys ={
    @ForeignKey(onDelete = CASCADE,entity = DBList.class,
    parentColumns = "listId",childColumns = "dbListId")},
    indices = {
            @Index("dbListId"),
    })
public class DBListContent {
    @PrimaryKey
    public String listContentId;
    public String content;
    public String lastEditedBy;
    public String lastEditedDateTime;
    public String dbListId;
}
13
msfreire