【问题标题】:DB4O - Update depth issueDB4O - 更新深度问题
【发布时间】:2013-10-14 20:35:07
【问题描述】:

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

public class Object1Class {

   private Object2Class;

}

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

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

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

我说的对吗?

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

- 更新子对象后,也许我需要在父对象上调用.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

【问题讨论】:

    标签: db4o


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,又一个例子说明了为什么 Java 和其他 OOP 语言应该自动跟踪这些关系。
    【解决方案2】:

    看起来您在删除时在内存中工作,在查询时在数据库中工作
    在删除后完成了 commit() 吗?

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

    最好的问候 克劳德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2011-04-24
      • 1970-01-01
      • 2023-02-07
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多