在Android Rooms ORM中基于@ForeignKey进行级联删除

Gri*_*mer 8 sqlite android android-room

我有两个实体DBList加入DBListContent.随着一个之间一对多的关系DBListDBListContent.

这是DBList班级

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

这里是 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;
}
Run Code Online (Sandbox Code Playgroud)

当我删除lists表中的行时,表中的相应行listContents不会被删除.

我使用以下Dao方法删除了行

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

@Query("delete from lists")
void deleteLists();
Run Code Online (Sandbox Code Playgroud)

我知道我错过了一些非常明显的东西.请指导我.

小智 13

我不知道回答你的问题为时已晚,但你所犯的错误就是放在@ForeignKey一个领域.

@ForeignKeysMUST进去表声明.

你的代码应该是这样的.

@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;
}
Run Code Online (Sandbox Code Playgroud)