2013-10-11 67 views
0

使用DB4O。我有一個由與對象2,像這樣的object1:DB4O - 更新深度問題

public class Object1Class { 

    private Object2Class; 

} 

如果我刪除object1,相關對象2將被刪除,沒有任何問題存在。

但是,如果我刪除object2,object1仍包含object2。理想情況下,當我刪除object2時,object1應該顯示對object2的空引用。

所以,我的直覺是DB4o級聯更新下對象樹,但它不是級聯UP對象樹。

我對不對?

如果不清楚,我的目標是在更新,更改或刪除子對象時更新父對象。

- 也許我需要在父對象之後調用.store()更新子對象後?

- 將transparent persistence解決這個問題?

這裏是我的配置:

EmbeddedConfiguration config = Db4oEmbedded.newConfiguration(); 
config.file().generateUUIDs(ConfigScope.GLOBALLY); 
config.common().objectClass(MyModel.class).cascadeOnDelete(true); 
config.common().objectClass(MyModel.class).cascadeOnUpdate(true); 
config.common().objectClass(MyModel.class).cascadeOnActivate(true); 
config.common().updateDepth(5); 
config.common().activationDepth(5); 

而且,請注意,我所有的持久類繼承爲MyModel類。

這裏是深度更新一些信息:

DB4o Update Depth info

回答

1

db4o的嘗試融入儘可能多地給了「面向對象」的理念,意義,它會盡量按照正常的OOP概念。

在這種情況下,它不會嘗試跟蹤孩子對父母的引用(.net/java運行時也不會跟蹤這些引用)。

你可以在這種情況下,做的是在回指向其父親,並且,每當客戶端被更新的孩子添加一個字段,更新其父相應(你可以使用db4o callbacks爲)

+0

謝謝,但爲什麼Java和其他OOP語言應該自動跟蹤這些關係的另一個例子。 –

1

它看起來就像你在內存中工作時刪除並在數據庫中查詢時一樣
已經做了commit()刪除後?

我鼓勵使用TA/TP來處理這些問題。

問候 克勞德