从容器对象中删除引用后,db4o会保留自由对象。怎么解决?

时间:2012-10-06 12:16:47

标签: java db4o

有谁知道如何使db4o在以下场景中工作?我尝试了cascadeOnUpdate()但失败了。

class Class1 {
    int field;
}

class Class2 {
    Class1[] clsArray;
}

//I usually change objects of Class2 in this way
Class2 obj = getFromContainer();
obj.clsArray = null;
objectContainer.store(obj);
objectContainer.commit();

class Class1 { int field; } class Class2 { Class1[] clsArray; } //I usually change objects of Class2 in this way Class2 obj = getFromContainer(); obj.clsArray = null; objectContainer.store(obj); objectContainer.commit();

问题是db4o没有从数据库中删除Class1对象,这不符合我的要求。我在Class2上尝试过cascadeOnUpdate(),但它也没有用。我是否需要循环进入Class2.clsArray并明确删除每个对象?或者是否有任何人可以为我提供技术的简单方法。

2 个答案:

答案 0 :(得分:0)

你基本上在寻找某种“垃圾收集”,删除对象时,不再引用它们。

db4o没有此功能。您需要手动查看数组并删除对象。

答案 1 :(得分:0)

抱歉,我没有尽快回答你的问题,但希望我来不及帮忙。

cascadeOnUpdate外,还有cascadeOnDelete。有关如何使用它的参考,look herelook here。有一个这样的例子:

EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
configuration.common().objectClass(Person.class).objectField("father").cascadeOnDelete(true);

这将做你想要的。您可以通过特定字段(如上)或整个班级分配它:

configuration.common().objectClass(Person.class).cascadeOnDelete(true);

以下是ObjectClassObjectField上的javadoc。