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

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

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: 不仅可以为更新设置层叠行为,也可以对检索(创建值为 “unlimited” 的激活深度)和删除设置层叠行为 —— 这是我最新琢磨的 Person 对象的最后一个应用 ,面向 Java 开发人员的 db4o 指南: 超越简单对象(10),删除结构化对

不仅可以为更新设置层叠行为,也可以对检索(创建值为 “unlimited” 的激活深度)和删除设置层叠行为 —— 这是我最新琢磨的 Person 对象的最后一个应用 。

删除结构化对象

从数据库中删除对象与检索和更新对象类似:默认情况下,删除一个对象时,不删除它引用的对象。一般而言,这也是理想的行为。如清单 9 所示:

清单 9. 删除结构化对象

@Test 
public void simpleDeletion() 
{ 
 Person ben = (Person)db.get(new Person("Ben", "Galbraith", null, 0, null)).next(); 
 db.delete(ben); 
     
 Person jess = (Person)db.get(new Person("Jessica", "Galbraith", null, 0, null)).next(); 
 assertNotNull(jess); 
} 

但是,有些时候在删除对象时,希望强制删除其引用的对象。与激活和更新一样,可以通过调用 Configuration 类触发此行为。如清单 10 所示:

清单 10. Configuration.setCascadeOnDelete()

@Test 
public void cascadingDeletion() 
{ 
  // the cascadeOnUpdate() call must be done while the ObjectContainer 
  // isn't open, so close() it, setCascadeOnUpdate, then open() it again 
  db.close(); 
  Db4o.configure().objectClass(Person.class).cascadeOnDelete(true); 
  db = Db4o.openFile("persons.data"); 
 
  Person ben = 
    (Person)db.get(new Person("Ben", "Galbraith", null, 0, null)).next(); 
  db.delete(ben); 
     
  ObjectSet<Person> results = 
    db.get(new Person("Jessica", "Galbraith", null, 0, null)); 
  assertFalse(results.hasNext()); 
} 

执行该操作时要小心,因为它意味着其他引用了被消除层叠的对象的对象将拥有一个对 null 的引用 —— db4o 对象数据库在防止删除被引用对象上使用的引用一致性 在这里没有什么作用。(引用一致性是 db4o 普遍需要的特性,据说开发团队正在考虑在未来某个版本中加入这一特性。对于使用 db4o 的开发人员来说,关键在于要以一种不违反最少意外原则 的方式实现,甚至某些时候,即使是在关系数据库中,打破一致性规则实际上也是一种理想的实践。)

结束语

本文是该系列文章的分水岭:在此之前,我使用的所有示例都基于非常简单的对象,从应用角度来讲,那些例子都不现实,其主要作用只是为了使您理解 OODBMS,而不是被存储的对象。理解像 db4o 这样的 OODBMS 是如何通过引用存储相关对象,是比较复杂的事情。幸运的是,一旦您掌握了这些行为(通过解释和理解),您所要做的就只是开始调整代码来实现这些行为。

在本文中,您看到了一些基本例子,通过调整复杂代码来实现 db4o 对象模型。学习了如何对结构化对象执行一些简单 CRUD 操作,同时,也看到了一些不可避免的问题和解决方法。

其实,目前的结构化对象例子仍然比较简单,对象之间还只是直接引用关系。许多夫妻都知道,结婚一段时间后,孩子将会出现。本系列的下一文章中,我将继续探索 db4o 中的结构化对象的创建与操作,看看在引入若干子对象后, ben 和 jess 对象将发生什么。

上一页  5 6 7 8 9 10 

Tags:面向 Java 开发

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