Bonjour à tous,
Mon problème esr très simple, et correspond à un modèle UML très classique :
une classe qui est liée à elle-même.
Pourtant, je n'arrive pas à trouver le mapping hibernate qui va bien.![]()
Voici donc mon problème :
J'ai un ensemble d'objets de classe Entity, et ces objets peuvent être liés les une aux autres. Je souhaiterai donc avoir une base qui ressemble à peu près à ça :
*********
* Entity *
*********
* id *
* nom *
* ...etc... *
* ********
***************
* Entities_Links *
***************
* entity_id1 *
* entity_id2 *
* ****** *******
Une table Entity pour stocker les objets Entity, et une table Entities_Links pour stocker les relations entre les objets Entity.
J'utilise donc la mapping suivant :
<hibernate-mapping>
<class name="Entity" table="ENTITY">
<id name="idBD" column="IDBD">
<generator class="native"/>
</id>
<property name="nom"/>
<set name="entities" table="ENTITIES_LINKS">
<key column="IDBD"/>
<many-to-many column="IDBD" class="Entity"/>
</set>
</class>
</hibernate-mapping>
Et j'obtiens l'erreur suivante :
Initial SessionFactory creation failed.org.hibernate.MappingException: Repeated column in mapping for collection: Entity.entities column: IDBD
Il semblerait donc qu'hibernate ne soit pas capable de créér une association vers lui-même, en tous les cas pas de la façon dont je l'ai fait.![]()
Quelqu'un aurait-il une solution ???
Merci beaucoup par avance.
A+,
Stève
PS:
en cherchant bien sur le web, j'ai tout-de même trouvé une pseudo-solution :
il suffit de renommer le nom de la colonne en le préfixant du nom de la classe.
On écrit donc :
<many-to-many column="Entity_IDBD" class="Entity"/>
au lieu de
<many-to-many column="IDBD" class="Entity"/>
et ça fonctionne.
Malheureusement, cette solution ne me convient pas, tout simplement parce que je ne la comprends pas, et j'ai plus l'impression qu'il s'agit d'une grosse bidouille plutôt que d'une solution réélle et fiable.
Mais si jamais quelqu'un a une explication pour cette bidouille....![]()
Partager