2009-08-10 5 views
3

Je n'arrive pas à conserver un lien many-to-many avec DataNucleus en utilisant JDO. J'ai deux classes Book et Shop. Ceci est le fichier de mapping ORM:La relation plusieurs-à-plusieurs dans DataNucleus (JDO) ne persiste pas

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

J'essaie de lier un livre à un magasin et dans l'autre sens, comme ceci:

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

La réalisation de ces deux objets à nouveau persistant, ne fait rien . Les deux avant et après le petit extrait de code ci-dessus, leur ObjectState est detached-clean.

Que pourrais-je faire de mal?

Répondre

4

J'ai une solution de travail, mais je dois admettre que je ne comprends pas tout. Les choses fonctionnent lorsque le dernier élément field n'est pas défini comme

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

mais comme

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

Cela a résolu mon problème.

Voir également le manuel DataNucleus au JDO M-N Relationships. Cependant, laisser les éléments join et element, comme cela est fait dans cet exemple, n'a pas fonctionné pour moi. Un autre lien pertinent sur le site DataNucleus est JDO Guides : M-N Relation. Le code pour ce dernier exemple peut être trouvé sur SourceForge. Malheureusement, cet exemple n'a pas fonctionné pour moi.

Ce n'est pas vraiment une bonne réponse, mais tout ce que je dois offrir pour l'instant ...

+2

Depuis « cartographié par » est nécessaire pour interrelation les deux côtés de la relation ... aka bidirectionnelle. – DataNucleus

Questions connexes