【发布时间】:2018-06-15 00:42:48
【问题描述】:
我如何存储一个引用了同一类的其他对象的对象?
我尝试了很多方法来使用注释和 XML,但都失败了。
在最好的情况下,我会收到以下错误:
警告:使用语句“INSERT INTO UNIT ("NAME",PARENT_UNIT_ID,ID) VALUES (?,?,?)" 插入对象 "pmo.domain.entities.Unit@1129829c" 失败:参数 "#2"未设置; SQL 语句: INSERT INTO UNIT ("NAME",PARENT_UNIT_ID,ID) 值 (?,?,?) [90012-196]
ExampleTest.java:
package pmo.domain.entities;
public class ExampleTest {
public static void Main(String[] args) {
Unit unit1 = new Unit(0, "Unit 1");
Unit unit2 = new Unit(1, "Unit 2", unit1);
Unit unit3 = new Unit(2, "Unit 3", unit2);
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Test");
PersistanceManager pm = pmf.getPersistenceManager();
Transaction transaction = pm.currentTransaction();
try {
transaction.begin();
pm.makePersistent(unit1);
pm.makePersistent(unit2);
pm.makePersistent(unit3);
transaction.commit();
} finally {
if (transaction.isActive()) {
transaction.rollback();
}
pm.close();
}
}
}
Unit.java:
package pmo.domain.entities;
public class Unit {
private long id;
private String name;
private Unit parentUnit;
public Unit(long id, String name, Unit parentUnit) {
this.id = id;
this.name = name;
this.parentUnit = parentUnit;
}
public Unit(long id, String name) {
this(id, name, null);
}
}
package.jdo:
<?xml version="1.0" encoding="UTF-8" ?>
<jdo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/jdo/jdo"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jdo/jdo http://xmlns.jcp.org/xml/ns/jdo/jdo_3_1.xsd" version="3.1">
<package name="pmo.domain.entities">
<class name="Unit" table="unit">
<field name="id" primary-key="true">
<column name="id"/>
</field>
<field name="parentUnit">
<column name="parent_unit_id" target-field="id"/>
<foreign-key name="unit_id_fk" />
</field>
</class>
</package>
</jdo>
【问题讨论】:
-
您不能将一条记录与另一条不存在的记录的键一起存储,无论它是否属于同一类。在您的情况下,您的第一次保存将失败,因为父级为空
-
@jr593 在没有填充 parentUnit 的情况下进行的其他测试中运行良好。只有在表明它失败的情况下。我正在寻找以另一种方式实现这种关系的方法。
标签: java xml database h2 datanucleus