Man*_*wal 5 database orm android ormlite android-sqlite
我在android中使用ormlite并成功创建表并使用DAO执行不同的操作.
但是如果从主表中删除主键,我就一直在删除外键行.
我有两个名为Parent和child的表.父母有多个孩子,所以我将孩子与外键联系起来.
代码:
父表:
@DatabaseField(id = true)
private Integer id;
@ForeignCollectionField(eager = false)
private ForeignCollection<Child> childCollection;
Run Code Online (Sandbox Code Playgroud)
子表:
@DatabaseField(id = true)
private Integer id;
@DatabaseField(foreign = true, foreignAutoRefresh = true, canBeNull = false,
index = true, columnDefinition = "INTEGER REFERENCES parent(id) ON DELETE CASCADE")
private Parent parent;
Run Code Online (Sandbox Code Playgroud)
现在如果我删除特定id的父行,那么这不会从子表中删除子项.
public void deleteById(Integer parentId) {
try {
Dao<Parent, Integer> parentDao = databaseHelper.getParentDao();
parentDao .deleteById(parentId);
} catch (SQLException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
请指导我,我做错了.我曾多次尝试和谷歌,但没有运气.
也许您已经找到了解决方案,但有人可能需要这个。根据BaseForeignCollection
源代码,解决方案可能如下:
parent.getChildren().clear();
Dao<Parent, Integer> parentDao = databaseHelper.getParentDao();
parentDao.delete(parent);
Run Code Online (Sandbox Code Playgroud)
实际上,您可以为父级实现自己的 dao 并重写删除方法,如下所示:
@Override
public int delete(final Parent data) throws SQLException {
data.getChildren().clear();
return super.delete(data);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可能就足够了。