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 :

Mapping d'association bidirectionnelle


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut Mapping d'association bidirectionnelle
    Bonjour,

    J'ai une association n-n bidirectionnelle entre une classe Concert et une classe Interprete. Les commandes SQL ci-dessous montrent la structure de la base de données correspondante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    create sequence seq_concert increment 1 minvalue 1 start 1;
     
    create table concert (
    	code_concert integer DEFAULT nextval(('public.seq_concert'::text)::regclass),
    	nom_concert character varying(128) NOT NULL,
    	date_concert date NOT NULL,
    	CONSTRAINT cle_concert PRIMARY KEY (code_concert)
    );
     
    create sequence seq_interprete increment 1 minvalue 1 start 1;
     
    create table interprete (
    	code_int integer DEFAULT nextval(('public.seq_interprete'::text)::regclass),
    	nom_int character varying(128) NOT NULL,
    	CONSTRAINT cle_int PRIMARY KEY (code_int)
    );
     
     
    create table participation_concert (
    	code_int integer NOT NULL,
    	code_concert integer NOT NULL,
    	CONSTRAINT cle_participation_concert PRIMARY KEY (code_int, code_concert)
    );
    L'association entre les deux tables se traduit donc par la table association 'participation_concert'. Dans mon application JAVA, j'ai implémenté deux classes. La classe Concert contient un Set<Interprete> et la classe Interprete contient un Set<Concert>. Le mapping de la classe Concert est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <class name="core.Concert" table="concert" lazy="false">
    	<id name="code" type="integer" column="code_concert">
    		<generator class="native">
    			<param name="sequence">seq_concert</param>
    		</generator>
    	</id>
    	<property name="nom" type="string" column="nom_concert"/>
    	<property name="date" type="date" column="date_concert"/>
    	<set name="interpretes" inverse="true" table="participation_concert"  lazy="false">
        	<key column="code_concert" />
        	<many-to-many column="code_int" class="core.Interprete"/>
        </set>
    </class>
    Pour la classe Interprete, c'est à peu près pareil.

    Si je crée un concert et le relie à deux interprètes. Le problème apparaît lorsque j'enregistre ce concert. Aucun enregistrement de type participation_concert n'est crée dans la table. Du coup, si je recharge le même concert, je ne recharge pas en même temps les deux interprètes. Est-ce un problème dans le mapping ? ou est-ce que je dois enregistrer "à la main" les enregistrements de la table participation_concert ?

    Merci d'avance. Et n'hésitez pas à me demander d'autres explications si celle ci-dessus ne sont pas claires.

    T2!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    il faut mettre cascade="all" au niveau du set

  3. #3
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut
    Merci, c'était effectivement une partie de la réponse. Mais une autre partie du problème venait du fait que j'avais placé inverse="true" des deux côtés. Et ce n'était pas bien! C'est bien marqué dans la doc qu'il faut le mettre d'un seul côté (celui de son choix), mais je ne l'ai pas vu...

    T2!

  4. #4
    T2!
    T2! est déconnecté
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Par défaut
    Précision : La seule erreur provenait de inverse="true" placé des deux cotés de la relation bidirectionnelle. Le cascade="all" n'est pas une nécessité. Cela lie simplement les durées de vie des objets Interprete et Concert. Mais aucun rapport avecla table association participation_concert.

    T2!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mapping des associations
    Par benny7 dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/08/2006, 16h00
  2. probleme avec le mapping d'association avec hibernate
    Par senediene dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/08/2006, 13h59
  3. Réponses: 4
    Dernier message: 26/06/2006, 16h16
  4. [hibernate]Problème mapping classe association
    Par jsl1 dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/06/2006, 17h27
  5. [Hibernate] Mapping d'association
    Par srvremi dans le forum Hibernate
    Réponses: 2
    Dernier message: 22/01/2006, 04h54

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