【问题标题】:Many-to-Many relationship in DataNucleus (JDO) doesn't persistDataNucleus (JDO) 中的多对多关系不会持续存在
【发布时间】:2009-08-10 08:36:20
【问题描述】:

我无法使用 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);

使这两个对象再次持久化并没有任何作用。上面的小代码sn-p前后,他们的ObjectState都是detached-clean

我做错了什么?

【问题讨论】:

    标签: java many-to-many jdo datanucleus


    【解决方案1】:

    我有一个可行的解决方案,但不得不承认我并不完全了解所有内容。当最后一个 field 元素未定义为时,一切正常

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

    但是作为

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

    这解决了我的问题。

    另请参阅JDO M-N Relationships 上的 DataNucleus 手册。但是,如本例中所做的那样,将 joinelement 元素排除在外,对我不起作用。 DataNucleus 网站上的另一个相关链接是JDO Guides : M-N Relation。最后一个示例的代码可以在SourceForge 上找到。不幸的是,这个例子也不适合我。

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

    【讨论】:

    • 因为需要“映射”来将关系的两侧相互关联......也就是双向的。
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2013-04-17
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多