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:
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
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>
Ce qui me donne bien les 3 tables voulu dont ma table de jointure personrequest avec 2 champs person_id et requestId.
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>
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:
précision: j'ai n'ai pas d'erreur à la compilation ni à l'execution.
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(); } .......
Merci pour d'avance pour votre aide.
Partager