0

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

public class Object1Class {

   private Object2Class;

}

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

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

所以,我的预感是 DB4o 在更新 DOWN 对象树时会级联,但不会向上级联对象树。

我对吗?

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

- 也许我需要.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 更新深度信息

4

2 回答 2

1

db4o 尝试尽可能地融合“OOP”哲学,也就是说,它将尝试遵循正常的 OOP 概念。

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

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

于 2013-10-14T12:16:36.197 回答
1

看起来您在删除时在内存中工作,在查询时在数据库中工作删除后是否执行
commit()

我鼓励使用能很好地解决这些问题的 TA/TP。

最好的问候克劳德

于 2013-10-14T12:35:07.300 回答