1

次のシナリオで db4o を機能させる方法を知っている人はいますか? cascadeOnUpdate() を試しましたが失敗しました。

class Class1 {
    int field;
}

class Class2 {
    Class1[] clsArray;
}

//I usually change objects of Class2 in this way
Class2 obj = getFromContainer();
obj.clsArray = null;
objectContainer.store(obj);
objectContainer.commit();

問題は、db4o がデータベースから Class1 オブジェクトを削除しないことです。これは私の要件を満たしていません。Class2 で cascadeOnUpdate() を試しましたが、うまくいきませんでした。Class2.clsArray にループして、各オブジェクトを明示的に削除する必要がありますか? または、誰かが私に技術を提供できる簡単な方法はありますか。

4

2 に答える 2

0

申し訳ありませんが、すぐに質問に答えることはできませんでしたが、遅すぎないことを願っています。

に加えてcascadeOnUpdate、もありcascadeOnDeleteます。使用方法については、こちらをご覧ください。また、こちらをご覧ください。このような例があります:

EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
configuration.common().objectClass(Person.class).objectField("father").cascadeOnDelete(true);

これはあなたが望むことをします。特定のフィールド(上記のように)を介して、またはクラス全体に割り当てることができます。

configuration.common().objectClass(Person.class).cascadeOnDelete(true);

ObjectClassこれがとのjavadocsですObjectField

于 2012-10-19T18:09:01.913 に答える
0

基本的に、オブジェクトが参照されなくなったときにオブジェクトが削除される、ある種の「ガベージコレクション」を探しています。

db4o にはこの機能がありません。配列を手動で調べて、オブジェクトを削除する必要があります。

于 2012-10-12T21:47:25.093 に答える