我有一个使用 Castor(版本 1.1.2.1)映射和 JDO 的 Servlets Web 应用程序。当我尝试创建一个具有 am:1 关系的新对象时,我得到父对象的 DuplicateIdentityException。
org.exolab.castor.jdo.DuplicateIdentityException:为具有标识 <1(1)> 的父类型对象找到重复标识:持久存储中已存在具有相同标识的对象。
我的 Parent 对象被加载到过滤器中并在请求中设置。
筛选
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 对象?