尝试持久化对象会导致引发此异常。它抱怨不正确的类型,但随后期望相同的类型。将项目从 dbd2012_p2 重命名为 dbd2012_p3 后开始出现异常(这是之前分配的延续)。
我在谷歌上没有找到关于这个例外的信息。我已经检查了元数据文件,确保没有留下任何 dbd2012_p2 实例,我现在很困惑。
我们的数据库基本上是多对多的关系:Prova 和 Tag。Mesura 使用一些额外的属性(活动、日期时间、x、y 和 z 坐标)对关系进行建模。
例外
javax.jdo.JDOUserException: The owner field prova of element class dbd2012_p3.Mesura has an incorrect type "dbd2012_p3.Prova". Should be "dbd2012_p3.Prova"
javax.jdo.JDOUserException: The owner field prova of element class dbd2012_p3.Mesura has an incorrect type "dbd2012_p3.Prova". Should be "dbd2012_p3.Prova"
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:519)
at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:736)
at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:756)
...
at dbd2012_p3.dbd2012_p3.main(dbd2012_p3.java:28)
代码
for (String name : names) {
for (String seq : seqs) {
Prova prova = new Prova(name, seq);
pm.makePersistent(prova); // Exception thrown here
}
}
Prova.java
@PersistenceCapable
public class Prova {
@PrimaryKey //OJO
private String nom_persona = null;
@PrimaryKey
private String num_seq = null;
private Set tagRelations = new HashSet();
public Prova(String nou_nom_persona, String nou_num_seq) {
nom_persona = nou_nom_persona;
num_seq = nou_num_seq;
}
public Prova(){}
包-mysql.orm
这就是我们定义表的方式:
<?xml version="1.0"?>
<!DOCTYPE orm SYSTEM "file:/javax/jdo/orm.dtd">
<orm>
<package name="dbd2012_p3">
<class name="Prova" type="application" table="prova">
<field name="nom_persona" primary-key="true">
<column name="nom_persona" length="45" jdbc-type="VARCHAR"/>
</field>
<field name="num_seq" primary-key="true">
<column name="num_seq" length="45" jdbc-type="VARCHAR"/>
</field>
<field name="tagRelations" persistence-modifier="persistent" mapped-by="prova">
<collection element-type="Mesura" />
</field>
</class>
<class name="Tag" type="application" table="tag">
<field name="codi" primary-key="true">
<column name="codi" length="45" jdbc-type="VARCHAR" />
</field>
<field name="nom">
<column name="nom" length="45" jdbc-type="VARCHAR" />
</field>
<field name="provaRelations" persistence-modifier="persistent" mapped-by="tag">
<collection element-type="Mesura" />
</field>
</class>
<class name="Mesura" type="datastore" table="mesura">
<field name="datetime" column="datetime"/>
<field name="prova" />
<field name="tag" />
<field name="activitat" />
<field name="x">
<column name="x" jdbc-type="DECIMAL" length="3" scale="1" />
</field>
<field name="y">
<column name="y" jdbc-type="DECIMAL" length="3" scale="1" />
</field>
<field name="z">
<column name="z" jdbc-type="DECIMAL" length="3" scale="1" />
</field>
</class>
</package>
</orm>
注意:我没有将此标记为家庭作业,因为作业是关于将数据挖掘技术应用于我们添加到数据库中的数据。我可以将项目重命名回它的旧名称,然后它又可以工作了,但是这个例外真的让我很烦。