WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 db4o 指南: 超越简单对象 阅读

面向 Java 开发人员的 db4o 指南: 超越简单对象

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: 如果要改变默认激活深度,需要以一种精密的方式,面向 Java 开发人员的 db4o 指南: 超越简单对象(7),在 Configuration 类(从 db.configure() 返回)中使用 db4o 的 activationDepth() 方法修改默认值,还有一种方式,当一个对象传递到 O

如果要改变默认激活深度,需要以一种精密的方式,在 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); 
} 

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接