面向 Java 开发人员的 db4o 指南: 超越简单对象
2010-04-01 00:00:00 来源:WEB开发网如果要改变默认激活深度,需要以一种精密的方式,在 Configuration 类(从 db.configure() 返回)中使用 db4o 的 activationDepth() 方法修改默认值。还有一种方式,可以对每个类配置激活深度。在清单 5 中,使用 ObjectClass 为 Person 类型配置默认激活深度:
清单 5. 使用 ObjectClass 配置激活深度
// See ObjectClass for more info
Configuration config = Db4o.configure();
ObjectClass oc = config.objectClass("com.tedneward.model.Person");
oc.minimumActivationDepth(10);
更新结构化对象
更新所关注的是另外一个问题:如果在对象图中更新一个对象,但并没有做显式设置,那么会发生什么?正如最初调用 set() 时,将存储引用了其他存储对象的相关对象,与之相似,当一个对象传递到 ObjectContainer,db4o 遍历所有引用,将发现的对象存储到数据库中,如清单 6 所示:
清单 6. 更新被引用的对象
@Test public void testDependentUpdate()
{
List<Person> maleGalbraiths =
db.query(new Predicate<Person>() {
public boolean match(Person candidate) {
return candidate.getLastName().equals("Galbraith") &&
candidate.getGender().equals(Gender.MALE);
}
});
Person ben = maleGalbraiths.get(0);
// Happy birthday, Jessica!
ben.getSpouse().setAge(ben.getSpouse().getAge() + 1);
// We only have a reference to Ben, so store that and commit
db.set(ben);
db.commit();
// Find Jess, make sure she's 30
Person jess = (Person)db.get(
new Person("Jessica", "Galbraith", null, 0, null)).next();
assertTrue(jess.getAge() == 30);
}
更多精彩
赞助商链接