3

JDO を使用して DataNucleus との多対多のリンクを維持することができません。と の 2 つのクラスがBookありShopます。これは orm マッピング ファイルです。

<?xml version="1.0"?>
<!DOCTYPE orm PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" 
    "http://java.sun.com/dtd/orm_2_0.dtd">

<orm>
    <package name="com.mypackage.pojo">
        <class name="Book" identity-type="datastore">
            <datastore-identity>
                <column name="BOOK_ID" />
            </datastore-identity>

            <field name="name">
                <column length="100" jdbc-type="VARCHAR" />
            </field>

            <field name="shops" persistence-modifier="persistent"
                    table="BOOKS_SHOPS">
                <collection element-type="com.mypackage.pojo.Shop" />
                <join>
                    <column name="BOOK_ID" />
                </join>
                <element>
                    <column name="SHOP_ID" />
                </element>
            </field>
        </class>

        <class name="Shop" identity-type="datastore">
            <datastore-identity>
                <column name="SHOP_ID" />
            </datastore-identity>

            <field name="name">
                <column length="50" jdbc-type="VARCHAR" />
            </field>

            <field name="books" persistence-modifier="persistent" 
                    table="BOOKS_SHOPS">
                <collection element-type="com.mypackage.pojo.Book" />
                <join>
                    <column name="SHOP_ID" />
                </join>
                <element>
                    <column name="BOOK_ID" />
                </element>
            </field>
        </class>
    </package>
</orm>

次のように、本をショップにリンクしたり、その逆を行ったりします。

shop.addBook(book);
book.addShop(shop);

これら 2 つのオブジェクトを再度永続化しても、何も起こりません。上記の小さなコード スニペットの前後の両方でObjectStatedetached-clean.

私は何が間違っているのでしょうか?

4

1 に答える 1

4

私は実用的な解決策を持っていますが、すべてを完全に理解しているわけではないことを認めなければなりません。field最後の要素が次のように定義されていない場合、物事は機能します

<field name="books" persistence-modifier="persistent" table="BOOKS_SHOPS">

しかし、

<field name="books" persistence-modifier="persistent" mapped-by="shops">

これで私の問題は解決しました。

JDO MN Relationshipsに関する DataNucleus マニュアルも参照してください。ただし、この例で行われているようにjoin、要素と要素を除外すると、うまくいきませんでした。elementDataNucleus サイトの別の関連リンクは、JDO Guides: MN Relationです。この最後の例のコードは、SourceForgeにあります。残念ながら、この例も私にはうまくいきませんでした。

これは本当に良い答えではありませんが、今のところ私が提供しなければならないのは...

于 2009-08-10T15:47:05.627 に答える