Je suis une relation parent assez simple/enfant ici, qui ressemble à ceci:: Comment modéliser une double relation parent/enfant
serveurs de messagerie ont n dossiers. Les dossiers peuvent contenir n (sous-) dossiers. Les dossiers renvoient à leur dossier parent ainsi qu'au serveur de messagerie auquel ils appartiennent.
Mes fichiers de mappage ressembler à ceci:
MailServer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 02.05.2011 12:32:52 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="test.MailServer" table="MAILSERVER">
<id name="id" type="long" access="field">
<column name="MAIL_SERVER_ID" />
<generator class="native" />
</id>
<bag name="folders" table="FOLDERS" lazy="false" inverse="true" cascade="all-delete-orphan">
<key column="MAIL_SERVER_ID"></key>
<one-to-many class="test.Folder" />
</bag>
</class>
</hibernate-mapping>
Folder.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 04.05.2011 15:02:31 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="test.Folder" table="FOLDERS">
<id name="id" type="long" access="field">
<column name="FOLDER_ID" />
<generator class="native" />
</id>
<many-to-one name="mailServer" column="MAIL_SERVER_ID" not-null="true" />
<bag name="folders" table="FOLDERS" lazy="false" inverse="true" cascade="all">
<key column="PARENT_FOLDER_ID" not-null="false"></key>
<one-to-many class="test.Folder" />
</bag>
<many-to-one name="parentFolder" column="PARENT_FOLDER_ID" />
</class>
</hibernate-mapping>
Le problème que je suis, est Suivant.
Disons que, je le hierachy suivant:
- MyMailServer
Folder1
- Folder2
Subfolder
Folder3
Quand j'appelle hibernateSession.save(mailServerInstance);
ou hibernateSession.update(mailServerInstance);
, Hibernate stocke correctement tout à la base de données. Les identifiants de colonnes parents sont remplis correctement. Idem pour toutes les autres références.
MAIS quand je charge les données, Hibernate rechargements le dossier hierachy comme ceci:
- MyMailServer
Folder1
Folder2
Subfolder
Folder3
Je comprends la raison: Subfolder a une référence à son MailServer et donc, Hibernate annonces là au lieu de dossier où il appartient.
Mais comment résoudre ce problème?
Merci d'avance!
Je crois que ce que vous cherchez n'est pas nécessairement une relation parent-enfant autant qu'une relation plusieurs-à-plusieurs. Ceux-ci sont difficiles tant du point de vue de la base de données que du point de vue de la modélisation. –
Etes-vous sûr? Si mailserver peut avoir plusieurs dossiers, mais que les dossiers ne peuvent appartenir qu'à un seul serveur de messagerie, que ce soit un-à-plusieurs ou pas? Idem pour les dossiers et (sous-) dossiers. Un dossier peut avoir plusieurs sous-dossiers mais seulement un dossier parent (au maximum), donc ce serait aussi un-à-plusieurs, à mon avis. – Timo
Désolé j'ai mal lu ce que vous disiez. –