使用Castor JDO创建新对象时找到重复的标识

时间:2016-04-11 16:12:49

标签: java servlets persistence castor castor-jdo

我有一个使用Castor(版本1.1.2.1)映射和JDO的Servlets Web应用程序。当我尝试创建一个具有m:1关系的新对象时,我得到父对象的DuplicateIdentityException。

org.exolab.castor.jdo.DuplicateIdentityException:找到类型为Parent的对象的重复标识,标识为< 1(1)>:持久存储中已存在具有相同标识的对象。

My Parent对象加载到过滤器中并在请求中设置。

过滤

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

的Servlet

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对象?

0 个答案:

没有答案