Каков синтаксис файла package.jdo для самореферентной таблицы - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть таблица с самоссылкой, которую я сопоставляю с помощью kodo jdo 4 (поставляется с сервера weblogic 10.3.4.) У меня будет код, полученный через энхансер, но при попытке его использовать я получаю сообщение об ошибке: 1001 *

<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)

таблица:

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)
);

класс:

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, но теперь синтаксис изменился, и дружественное руководство не так полезно, что я могу найти.

Ответы [ 3 ]

0 голосов
/ 08 декабря 2011

Можете ли вы попробовать

<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 голосов
/ 05 января 2012

вот что наконец сработало

    <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 голосов
/ 30 ноября 2011

Возможно, он возражает против того, чтобы вы определили объединяющую таблицу для того, чтобы это отношение было таблицей для самого класса (что явно неверно).

Очевидно, что Kodo не полностью совместим с JDO и мертв как проект, поэтому, если вы сталкиваетесь с проблемами, у вас возникают проблемы ...

...