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

Struts 1 Java Discussion :

[struts][hibernate] Mapping d'association: probleme insertion dans table de jointure


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut [struts][hibernate] Mapping d'association: probleme insertion dans table de jointure
    Bonjour,

    dans une appli struts-hibernate, j'ai mappé une association bidirectionnelles avec table de jointure one to many/many to one.

    voici les fichiers de mapping:

    Person.hbm.xml:
    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
     
    <hibernate-mapping package="com.hibernate">
      <class name="Person" table="person">
    	<id name="id" column="person_id" type="java.lang.Long">
    		<generator class="increment">
    		</generator>
    	</id>
    	<property name="age" column="age" type="java.lang.Integer"/>
    	<property name="firstname" column="firstname" type="java.lang.String"/>
    	<property name="lastname" column="lastname" type="java.lang.String"/>
    	<property name="password" column="password" type="java.lang.String"/>
    	<property name="emailAddress" column="email_addr" type="java.lang.String"/>
    	<property name="admin" column="admin" type="java.lang.Boolean" />
     
    	<set name="request" table="personrequest">
    		<key column="person_id"/>
    		<many-to-many column="requestId"
    			unique="true" class="Request"/>
    	</set> 
      </class>
    </hibernate-mapping>
    Request.hbm.xml:
    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
     
    <hibernate-mapping package="com.hibernate">
     
      <class name="Request" table="request">
    	<id name="requestId" column="requestId" type="java.lang.Integer">
    		<generator class="increment">
    		</generator>
    	</id>
    	<property name="title" column="title" type="java.lang.String"/>
    	<property name="message" column="message" type="java.lang.String"/>
    	<property name="priority" column="priority" />	
    	<join table="personrequest" inverse="true" optional="true">
    		<key column="requestId"/>
    		<many-to-one name="person" column="person_id" not-null="true"/>
    	</join>  	
      </class>
    </hibernate-mapping>
    Ce qui me donne bien les 3 tables voulu dont ma table de jointure personrequest avec 2 champs person_id et requestId.

    Quand je fais une insertion d'un objet request, la table request est bien rempli
    mais pas la table personrequest. Je fais une insertion par l'intermediaire d'un formulaire géré à l'aide de struts. Voici la partie de code de l'action qui gère l'insertion:

    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
    25
     
    .....
    User user = (User) session.getAttribute(AttributeIDs.SESS_USER);
     
    /* a Hibernate session */
    Session sess = null;
    /* get session of the current thread */
    sess = HibernateUtil.getSessionFactory().getCurrentSession();
    Request r = new Request();
    DynaValidatorForm formulaire=(DynaValidatorForm)form;
    HttpSession session =request.getSession();	 
     
    try {
      sess.beginTransaction();
      BeanUtils.copyProperties(r,formulaire);
      Person p = (Person) sess.get(Person.class, user.getId());
      r.setPerson(p);
      sess.persist(r);
      sess.getTransaction().commit();
    }
     catch (HibernateException he) {
    	if (sess.getTransaction()!=null){
    	sess.getTransaction().rollback();
    }
    .......
    précision: j'ai n'ai pas d'erreur à la compilation ni à l'execution.

    Merci pour d'avance pour votre aide.
    -> débutant <-

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    bon ben j'ai toujours pas trouvé de solution.

    si quelqu'un a un peu de temps merci.
    -> débutant <-

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    le tag <join> n'exprime pas une relation many-to-many.

    je verrais plutot quelque chose du genre :
    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
    25
    26
    27
    28
    29
     
    <hibernate-mapping>
    	<class name="Request" table="REQUEST">
     
    	  <id column="ID" name="id" type="java.lang.Long">
    	    <generator class="native"/>
    	  </id>
     
    	  <bag name="persons" table="PERSONREQUEST" cascade="all">
    	    <key column="requestId"/>
    	    <many-to-many column="person_id" class="Person"/>
    	  </bag>    
     
    	</class>
     
    	<class name="Person" table="PERSON">
     
    	  <id column="ID" name="id" type="java.lang.Long">
    	    <generator class="native"/>
    	  </id>
     
    	  <bag name="requests" table="PERSONREQUEST" cascade="all">
    	    <key column="person_id"/>
    	    <many-to-many column="requestId" class="Request"/>
    	  </bag> 
     
    	</class>
     
    </hibernate-mapping>

    de plus, si tu as une relation many-to-many, ta classe Request devrait plutot declarer une methode addPerson(Person) plutot que setPerson(Person)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    il ne s'agit pas d'une relation many to many mais d'une relation many to one bidirectionnelle. En gros un utilisateur (person) peut effectuer plusieurs requetes mais une requete a un emetteur unique.
    -> débutant <-

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    toujours rien ?
    -> débutant <-

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/04/2013, 22h38
  2. Problème pour insertion dans tables avec jointure
    Par C3DRIC49 dans le forum Langage
    Réponses: 8
    Dernier message: 15/10/2010, 21h52
  3. [MySQL] insertion dans table avec jointure
    Par popoche28 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 06/05/2010, 16h15
  4. [Hibernate] Mapping d'association
    Par srvremi dans le forum Hibernate
    Réponses: 2
    Dernier message: 22/01/2006, 04h54
  5. Réponses: 16
    Dernier message: 02/12/2005, 10h39

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