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.
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. –