2009-08-10 20 views
3

JDOを使用してDataNucleusと多対多のリンクを維持することはできません。私は2つのクラスBookShopを持っています。これは、ORMマッピングファイルです:DataNucleus(JDO)の多対多関係が維持されない

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

は再び何もしません。 。上記のコードスニペットの前と後の両方で、ObjectStatedetached-cleanです。

私は間違っていますか?

答えて

4

私は実用的な解決策を持っていますが、私はすべてを完全に理解していないことを認めなければなりません。最後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にあります。残念ながら、この例も私のためには機能しませんでした。

これは本当に良い答えではありませんが、私は今のところ提供しているものすべて...以来

+2

「マッピングされた-で」別名双方向の関係の両側を...相互に関係するために必要とされます。 – DataNucleus