DB4O - 更新深度问题

时间:2013-10-11 18:32:44

标签: db4o

使用DB4O。我有一个object1,它由object2组成,如下所示:

public class Object1Class {

   private Object2Class;

}

如果删除object1,关联的object2将被删除,没有问题。

但是,如果删除object2,则object1仍然包含object2。理想情况下,当我删除object2时,object1应该显示对object2的空引用。

所以,我的预感是DB4o在更新DOWN对象树时级联,但它没有级联UP对象树。

我是对的吗?

如果不清楚,我的目标是在更新,更改或删除子对象时更新父对象。

- 在更新子对象后,我可能需要在父对象上调用.store()吗?

- transparent persistence会解决此问题吗?

这是我的配置:

EmbeddedConfiguration config = Db4oEmbedded.newConfiguration();
config.file().generateUUIDs(ConfigScope.GLOBALLY);
config.common().objectClass(MyModel.class).cascadeOnDelete(true);
config.common().objectClass(MyModel.class).cascadeOnUpdate(true);
config.common().objectClass(MyModel.class).cascadeOnActivate(true);
config.common().updateDepth(5);
config.common().activationDepth(5);

另外,请注意我所有的持久化类都继承了MyModel类。

以下是有关更新深度的一些信息:

DB4o Update Depth info

2 个答案:

答案 0 :(得分:1)

db4o尝试尽可能地融合“OOP”理念,这意味着它会尝试遵循正常的OOP概念。

在这种情况下,它不会尝试跟踪从子节点到父节点的引用(.net / java运行时也不跟踪此类引用)。

在这种情况下你可以做的是在孩子中添加一个指向其父级的字段,并且每当客户端更新时,相应地更新其父级(你可以使用db4o callbacks

答案 1 :(得分:1)

当你查询时,看起来你正在内存中删除和在数据库中工作了在删除后做了 commit()吗?

我鼓励使用TA / TP来管理这些问题。

祝你好运 克劳德