编程语言
首页 > 编程语言> > java-DataNucleus(JDO)中的多对多关系不持久

java-DataNucleus(JDO)中的多对多关系不持久

作者:互联网

我无法使用JDO与DataNucleus保持多对多链接.我有两个课本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);

使这两个对象再次持久不会执行任何操作.在上面的小代码段之前和之后,它们的ObjectState是分离干净的.

我可能做错了什么?

解决方法:

我有一个可行的解决方案,但必须承认我并不完全了解所有内容.当最后一个字段元素未定义为

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

但是作为

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

这解决了我的问题.

另请参见DataNucleus手册,网址为JDO M-N Relationships.但是,像本示例中所做的那样,保留join和element元素对我而言不起作用. DataNucleus站点上的另一个相关链接是JDO Guides : M-N Relation.该最后一个示例的代码可以在SourceForge上找到.不幸的是,该示例也不适用于我.

这并不是一个很好的答案,但是我现在要提供的全部…

标签:jdo,many-to-many,datanucleus,java
来源: https://codeday.me/bug/20191107/2003210.html