2009-08-10 15 views
3

Es gelingt mir nicht, eine Viele-zu-viele-Verbindung mit DataNucleus mit JDO aufrechtzuerhalten. Ich habe zwei Klassen Book und Shop. Dies ist die ORM-Mapping-Datei:Many-to-Many-Beziehung in DataNucleus (JDO) wird nicht beibehalten

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

Ich versuche, ein Buch zu einem Geschäft und umgekehrt wie diese, zu verknüpfen:

shop.addBook(book); 
book.addShop(shop); 

machen diese beiden Objekte persistent macht wieder nichts . Sowohl vor als auch nach dem obigen Code-Snippet ist ObjectStatedetached-clean.

Was könnte ich falsch machen?

Antwort

4

Ich habe eine funktionierende Lösung, aber muss zugeben, dass ich nicht alles verstehe. Dinge funktionieren, wenn das letzte field Element nicht als

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

aber als

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

Dies löste mein Problem definiert ist.

Siehe auch das DataNucleus-Handbuch unter JDO M-N Relationships. Das Verlassen der join und element Elemente, wie es in diesem Beispiel gemacht wird, funktionierte jedoch nicht für mich. Ein weiterer relevanter Link auf der DataNucleus-Site ist JDO Guides : M-N Relation. Der Code für dieses letzte Beispiel ist unter SourceForge zu finden. Leider hat dieses Beispiel auch nicht für mich funktioniert.

Dies ist nicht wirklich eine gute Antwort, aber alles, was ich jetzt ...

+2

Da „gemappt-by“ benötigt wird, um die beiden Seiten der Beziehung zueinander in Beziehung zu ... Auch bekannt als bidirektionaler zu bieten habe. – DataNucleus

Verwandte Themen