首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自引用表的package.jdo文件的语法是什么

自引用表的package.jdo文件的语法是什么
EN

Stack Overflow用户
提问于 2011-12-01 00:01:47
回答 3查看 349关注 0票数 0

我有一个用kodo jdo 4映射的自引用表(由weblogic server 10.3.4提供)。我的代码将通过增强器,但当我尝试使用它时,我得到了错误:

代码语言:javascript
复制
<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)

该表如下:

代码语言:javascript
复制
CREATE TABLE branch 
(
id              VARCHAR2(10)   NOT NULL,
parentId        VARCHAR2(10)  NOT NULL,
[other fields deleted ...]
CONSTRAINT branch_pk PRIMARY KEY(id),
CONSTRAINT branch_fk_parent FOREIGN KEY(parentId) REFERENCES branch(id)
);

这个类是:

代码语言:javascript
复制
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文件为:

代码语言:javascript
复制
    <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中工作的功能,但现在语法不同了,友好的手册对我来说帮助不大。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-05 23:56:36

以下是最终奏效的方法

代码语言:javascript
复制
    <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"属性。

票数 0
EN

Stack Overflow用户

发布于 2011-12-01 03:13:59

也许它反对您将该关系的连接表定义为类本身的表(这显然是错误的)。

显然Kodo不是完全兼容JDO的,而且作为一个项目已经死了,所以如果你遇到了问题,那么你就有问题了……

票数 0
EN

Stack Overflow用户

发布于 2011-12-08 13:03:07

你能试一下吗?

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8328958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档