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.