0

que je prends le beaucoup à de nombreux exemples de cartographie de cette Hibernate Mapping Cheat Sheet suivante:mapping de la collection Mise en veille prolongée en lecture seule

<class name="Foo" table="foo"> 
    ... 
    <set role="bars" table="foo_bar"> 
    <key column="foo_id"/> 
    <many-to-many column="bar_id" class="Bar"/> 
    </set> 
</class> 

<class name="Bar" table="bar"> 
    ... 
    <set role="foos" table="foo_bar" readonly="true"> 
    <key column="bar_id"/> 
    <many-to-many column="foo_id" class="Foo"/> 
    </set> 
</class> 

Un Foo a plusieurs bars, et un bar a plusieurs foos. Parce que Bar.foos est déclaré readonly, je suppose que je dois juste cette méthode simple:

public class Foo { 
    public void addBar(Bar bar) { 
     this.bars.add(bar); 
    } 
} 

Et pas:

public class Foo { 
    public void addBar(Bar bar) { 
     this.bars.add(bar); 
     bar.foos.add(foo); // readonly 
    } 
} 

Je pense que je ne peux pas assurer la cohérence de cette façon (en rajoutant le Foo au Bar). Est-ce que Hibernate garantit elle-même cette cohérence en mettant à jour automatiquement Bar.foos chaque fois que j'ajoute un Foo.bars, ou la collection Bar.foos est-elle statique une fois initialisée?

Par exemple, si je fais ceci:

Foo foo = new Foo(); 
Bar bar = new Bar(); 

bar.getFoos().size(); // expected to return 0 
foo.addBar(bar); 
bar.getFoos().size(); // expected to return 1 

Est-ce que les valeurs de retour de size() être ceux que j'attends?

Je n'ai pas encore trouvé la documentation appropriée, donc un pointeur serait très utile.

+1

Voici la documentation pertinente: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/. Si vous ouvrez le fichier DTD à l'adresse http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd, vous découvrirez qu'il n'y a pas d'attribut role ni readonly dans un ensemble. Votre documentation est probablement obsolète. Utilisez la documentation de référence. –

Répondre

0

L'une des références doit porter la mention inverse="true" et non en lecture seule.

La partie inverse n'est pas stockée par NH. Mais, bien sûr, vous obtenez des problèmes de cohérence en mémoire lorsque vous travaillez avec ces objets.

Jetez un oeil à la documentation de référence, Bidirectional associations with join tables, Many-to-many

Questions connexes