IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

une association vers soi-même ?


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut une association vers soi-même ?
    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....

  2. #2
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon, désolé, on vient à l'instant de me répondre sur une forum US.

    Donc j'ai un peu honte tellement c'est simple, et j'avoue que je n'avais pas très bien compris le mapping hibernate.

    Donc dans
    <set name="entities" table="ENTITIES_LINKS">
    <many-to-many column="IDBD" class="Entity"/>
    </set>,
    le champ indiqué par l'attribut "column" ne fait pas référence au champ de la table "Entity" qui doit être référencé dans la table "ENTITIES_LINKS".
    Car de toute façon, ce sera la clé primaire de "Entity" qui sera dans cette colonne.
    Mais ce champ fair référence au NOM de la colonne dans la table "ENTITIES_LINKS" qui mappera la clé primaire d'"Entity".

    Autrement dit, on peut écrire :
    <set name="entities" table="ENTITIES_LINKS">
    <key column="toto"/>
    <many-to-many column="tutu" class="Entity"/>
    </set>,

    Et on obtiendra la table :

    ***************
    * Entities_Links *
    ***************
    * toto *
    * tutu *
    * ****** *******

    toto et Tutu référançant tous 2 une clé primaire de Entity.

    Voilà,
    A+,
    Stève

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/06/2012, 22h23
  2. Modéliser un lien (n,m) d'une table vers elle-même
    Par vince3147 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2011, 18h37
  3. [Liferay] Modifier une portlet créé sois même(et non fourni par liferay)
    Par ckalubi dans le forum Portails
    Réponses: 5
    Dernier message: 12/11/2009, 15h03
  4. copier-coller d'une treeview vers elle-même
    Par fredonouille dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/05/2008, 09h12
  5. Drag&Drop d'une treeview vers elle-même
    Par fredonouille dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/05/2008, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo