【问题标题】:Cascade delete based on @ForeignKey in Android Rooms ORMAndroid Rooms ORM中基于@ForeignKey的级联删除
【发布时间】:2017-09-03 08:19:08
【问题描述】:

我有两个实体 DBListDBListContentDBListDBListContent 之间存在一对多关系。

这是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();

我知道我遗漏了一些非常明显的东西。请指导我。

【问题讨论】:

    标签: android sqlite android-room


    【解决方案1】:

    我不知道现在回答您的问题为时已晚,但您的错误是将@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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2018-08-28
      • 2014-10-21
      • 1970-01-01
      • 2012-05-24
      • 2021-12-08
      • 2014-04-01
      • 2011-10-12
      • 1970-01-01
      相关资源
      最近更新 更多