6

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

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

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

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

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

4

1 回答 1

7

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

 @DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade")
 private DocumentEntity document;
于 2013-03-18T04:33:23.147 回答