2009-08-10 54 views
3

我無法使用JDO持久保留與DataNucleus的多對多鏈接。我有兩個類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 2009-08-12 12:57:13