1

Castor (バージョン 1.1.2.1) マッピングと JDO を使用するサーブレット Web アプリがあります。am:1 リレーションを持つ新しいオブジェクトを作成しようとすると、親オブジェクトの DuplicateIdentityException が発生します。

org.exolab.castor.jdo.DuplicateIdentityException: ID <1(1)> を持つ親タイプのオブジェクトに重複した ID が見つかりました: 同じ ID を持つオブジェクトが永続ストレージに既に存在します。

親オブジェクトがフィルターに読み込まれ、リクエストに設定されます。

フィルター

Database db = getDatabase():
db.begin();
request.setAttribute("parent", db.load(Parent.class, 1));
db.commit();
db.close();

サーブレット

Parent parent = (Parent) request.getAttribute("parent");
Database db = getDatabase();
db.begin();
new Child();
child.setParent(parent);
db.create(child); <-- Exception here: DuplicateIdentityException
db.commit();
db.close();

getDatabase は JDOManager.getDatabase() を呼び出します。

マッピング ファイル:

<class name="Parent" identity="id" key-generator="IDENTITY">
    <cache=type="fifo" />
    <field name="id" type="integer">
        <sql name="id" type="integer" />
    </field>
    <field name="child" type="Child" collection="arraylist">
        <sql many-key="parent_id" />
    </field>
</class>

<class name="Child" identity="id" key-generator="IDENTITY">
    <cache=type="fifo" />
    <field name="id" type="integer">
        <sql name="id" type="integer" />
    </field>
    <field name="parent" type="Parent">
        <sql name="parent_id" />
    </field>
</class>

Castor JDO を使用して、Parent との正しい関係を持つ Child オブジェクトを作成するにはどうすればよいですか?

4

0 に答える 0