Java 自引用表的package.jdo文件的语法是什么
我有一个自参考表,我正在用WebLogicServer10.3.4提供的kodo jdo 4映射它。我拥有的代码将通过增强器,但当我尝试使用它时,会出现错误:Java 自引用表的package.jdo文件的语法是什么,java,oracle,jdo,Java,Oracle,Jdo,我有一个自参考表,我正在用WebLogicServer10.3.4提供的kodo jdo 4映射它。我拥有的代码将通过增强器,但当我尝试使用它时,会出现错误: <openjpa-1.1.1-SNAPSHOT-r422266:965591 fatal user error> kodo.jdo.FatalUserException: Missing table name for field "com.[...].jdo.Branch.branches". This field canno
<openjpa-1.1.1-SNAPSHOT-r422266:965591 fatal user error> kodo.jdo.FatalUserException: Missing table name for field "com.[...].jdo.Branch.branches". This field cannot reside in the owning class table.
at org.apache.openjpa.jdbc.meta.FieldMapping.mapJoin(FieldMapping.java:529)
课程为:
public class Branch implements MenuPart, Serializable
{
private Branch parent;
private Set<Branch> branches = new HashSet<Branch> ();
private String id;
private Set<Leaf> leafs = new HashSet<Leaf> ();
private long ordering;
private String title;
//methods removed.
}
package.jdo文件是:
<class name="Branch" objectid-class="BranchId" table="SCHEMA.BRANCH">
<version strategy="none"/>
<field name="parent" table="SCHEMA.BRANCH">
<column name="SCHEMA.BRANCH.PARENTID" target="ID" />
</field>
<field name="branches" table="SCHEMA.BRANCH" >
<collection element-type="Branch"/>
<join>
<column name="SCHEMA.BRANCH.PARENTID" target="ID" />
</join>
</field>
<field name="id" column="ID" primary-key="true"/>
<field name="leafs" table="SCHEMA.LEAF">
<collection element-type="Leaf"/>
<join>
<column name="ID" target="BRANCHID" />
</join>
</field>
<field name="ordering" column="ORDERING"/>
<field name="title" column="TITLE"/>
</class>
我已经获得了在kodo jdo 3.4中使用的功能,但是现在语法不同了,友好的手册也没有我能找到的帮助。也许它反对您将该关系的联接表定义为类本身的表,这显然是错误的 显然,Kodo不完全兼容JDO,并且作为一个项目已经过时了,所以如果遇到问题,那么您就会遇到问题…您能试试吗
<class name="Branch" objectid-class="BranchId" table="SCHEMA.BRANCH">
<version strategy="none"/>
<field name="parent" table="SCHEMA.BRANCH">
<column name="SCHEMA.BRANCH.PARENTID" target="ID" />
</field>
<field name="branches" table="SCHEMA.BRANCH" >
<collection element-type="Branch"/>
<extension vendor-name="kodo" key="inverse-owner" value="parent"/>
</field>
<field name="id" column="ID" primary-key="true"/>
</class>
以下是最终奏效的方法
<class name="Branch" objectid-class="BranchId" table="EBIGP.BRANCH">
<version strategy="none"/>
<field name="parent">
<column name="EBIGP.BRANCH.PARENTID" target="ID" />
</field>
<field name="branches" mapped-by="parent" />
<field name="id" column="ID" primary-key="true"/>
<field name="leafs" default-fetch-group="true">
<collection element-type="Leaf"/>
<element column="BRANCHID"/>
</field>
<field name="ordering" column="ORDERING"/>
<field name="title" column="TITLE"/>
</class>
显然,它所需要的只是一个mapped by=parent属性。这应该可以工作,但oracle 13498102中有一个bug,在仅JDO的文件案例中失败。它可以同时使用jdo和ORM文件。
<class name="Branch" objectid-class="BranchId" table="EBIGP.BRANCH">
<version strategy="none"/>
<field name="parent">
<column name="EBIGP.BRANCH.PARENTID" target="ID" />
</field>
<field name="branches" mapped-by="parent" />
<field name="id" column="ID" primary-key="true"/>
<field name="leafs" default-fetch-group="true">
<collection element-type="Leaf"/>
<element column="BRANCHID"/>
</field>
<field name="ordering" column="ORDERING"/>
<field name="title" column="TITLE"/>
</class>