为什么没有foreignAutoDelete?

时间:2013-03-08 12:21:07

标签: foreign-keys ormlite

我正在使用Ormlite for Android将现有应用程序从文件转换为对象的数据库存储。我有一个相当复杂的对象数据结构,我需要进入数据库,最初至少我不想修改太多的对象结构来完成这个。在这个现有的结构中,我有很多级别的嵌套外来对象。

我的问题,foreignAutoCreate似乎自动运行良好。当我在数据库中创建一个具有外来对象的对象时,它本身有外来对象等,直到四个或五个级别,包含主对象的单个创建将所有外来对象填充到所有这些级别。

我不相信有一种方法可以删除主对象,并且有一个ormlite级联删除所有级别的包含外来对象。我想确认一下,我没有错过任何东西,而且我正在做的事情没有更简单的解决方案,即使用触发器从主表删除删除所有内容。我知道级联删除是一种选择,但我无法让它工作。但即使它确实有效,我仍然想知道缺少foreignAutoDelete选项,因为在数据库中有一些配置,而ormlite中的一些似乎最终可能会导致问题。

现在我在通过所有这些级别的外来对象完成更新选项时遇到问题。最初,我正在创建主对象,它将创建所有子对象。我会尝试更新主对象或删除,然后读取主对象,但它似乎没有影响孩子(他们没有更新)。添加级联删除后,我假设删除主对象并级联其子对象然后读取主对象将实现“更新”,但是现在当我读取主对象时孩子没有被添加回来。我认为在添加回主对象之后,子表上的删除触发器存在一些时间/事务问题。 foreignAutoCreate对所有子对象保持打开状态,因此我假设在从数据库中清除所有内容后,应在第二次创建主对象时填充它们。

希望这个问题有意义,并提前感谢任何回复。

1 个答案:

答案 0 :(得分:7)

将columnDefinition参数添加到子项的外键DatabaseField声明中。在此示例中,文档是父文档。 DocumentEntity是类的名称,但表名称定义为“document”

 @DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade")
 private DocumentEntity document;