有谁知道如何使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并明确删除每个对象?或者是否有任何人可以为我提供技术的简单方法。
答案 0 :(得分:0)
你基本上在寻找某种“垃圾收集”,删除对象时,不再引用它们。
db4o没有此功能。您需要手动查看数组并删除对象。
答案 1 :(得分:0)
抱歉,我没有尽快回答你的问题,但希望我来不及帮忙。
除cascadeOnUpdate
外,还有cascadeOnDelete
。有关如何使用它的参考,look here和look here。有一个这样的例子:
EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
configuration.common().objectClass(Person.class).objectField("father").cascadeOnDelete(true);
这将做你想要的。您可以通过特定字段(如上)或整个班级分配它:
configuration.common().objectClass(Person.class).cascadeOnDelete(true);
以下是ObjectClass
和ObjectField
上的javadoc。