3

我无法使用 JDO 与 DataNucleus 保持多对多链接。我有两个班级BookShop. 这是 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);

使这两个对象再次持久化不会做任何事情。在上面的小代码片段之前和之后,它们ObjectState都是detached-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 关系的 DataNucleus 手册。但是,如本例中所做的那样,将join和元素排除在外,对我不起作用。elementDataNucleus 站点上的另一个相关链接是JDO Guides: MN Relation。最后一个示例的代码可以在SourceForge 上找到。不幸的是,这个例子也不适合我。

这不是一个很好的答案,但我现在必须提供的一切......

于 2009-08-10T15:47:05.627 回答