请教db4o delete对象后,关联对象未删除

11-04-25 gltbeyond
请教各位兄弟,小弟在使用db4o 存储一个对象CacheV2Element,有3个属性。

public class CacheV2Element {
	private String key;
	private KeyedCollection kcoll;
	//milliseconds
	private long age;
。。。
}
<p>

其中的KeyedCollection 是个复杂些的对象。KeyedCollection 里面可以放任何对象。也可以放KeyedCollection 。在我删除一个CacheV2Element后,发现KeyedCollection 对象并没有删除掉。

public class KeyedCollection extends DataElement implements Map {

	private Map dataElements;

	private List dataNames;

	public KeyedCollection() {
		super();
		dataElements = new HashMap();
		this.dataNames = new ArrayList();
	}
        ..........
}
<p>

删除和更新的时候,我加了:

 this.odb.ext().refresh(element, 5);
这个5,我不确定对象的深度为多少???
	/**
	 * 删除缓存中的对象,并且顺带删除过期的对象
	 * */
	public void delete(final String journalNo) {
		try{
			this.odb=Db4oCP.getODBConnection();
			CacheV2Element element=this.queryCacheV2Element(journalNo);
			if(element!=null){
				
				this.odb.delete(element);
				this.odb.ext().refresh(element, 5);
				this.odb.commit();
				Trace.logDebug(Trace.COMPONENT_JDBC, "SessionCacheV2 delete key="+journalNo);
			}
			//call delete all.
			deleteGarbage();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			Db4oCP.release(this.odb);
		}
	}
<p>

    

1
gltbeyond
2011-07-04 12:25
4.Structed Object

如果一个对象中不仅仅有常见的java类型还包含其他的对象,那么在modify 被包含的对象的时候,就会出现一个问题。如果我更新了这些被包含的对象,那么在update delete 的时候,他们会不会被操作到?db4o中 提供了一个 depth的概念。所有object 的默认的update depth为1,这就意味着该object 中的primitive 和 string members 能被update,其他类型的对象将不被update。 同样对应delete 如果想实现 对象中的递归删除, 那同样需要利用db4o中的 delete depth

这是update depth:

[updatePilotSeparateSessionsImprovedPart1]

Db4o.configure().objectClass("com.db4o.f1.chapter2.Car").cascadeOnUpdate(true);

这是delete depth:

[deleteDeepPart1]

Db4o.configure().objectClass("com.db4o.f1.chapter2.Car")

.cascadeOnDelete(true);

Again: Note that all configuration must take place before the ObjectContainer is opened.

其实这里还没有结束,对于delete 会出现这么一个问题,当我通过 delet depth 将一个instance 删除了,他里面包含的某个其他类型的object instance 也被删除了,但是这个

对象还在被其他对象引用,那这个问题怎么办? 现在db4o 还没有解决方法。我们现在只能

小心操作delete。

blackblade2008
2012-02-13 22:20
哈哈,傻了吧?指望通过配置文件实现复杂的业务对象关联关系管理?

我认为这是不可能的!

即使开发实施人员能够配出来,用户自己能实现吗?如果不能,这样的软件对用户有什么吸引力呢?

猜你喜欢