Hello forum !!

J'ai un petit problème que je ne sais comment résoudre... si quelqu'un pouvait m'orienter ça m'aiderai.

Je m'explique :

J'ai deux tables principales : Event et Media.
J'ai également une table secondaire, Event_Media. Cette dernière contient les champs suivants :

eventid, mediaid, event_mediaweight, event_mediapercent


Le but du système est de récupérer la liste des évènements, avec pour chacun la liste des médias associés. Pour ce faire, j'ai un mapping sur la classe Event qui contient un set du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<set name="management" inverse="true" lazy="false" order-by="event_mediaweight asc" cascade="all-delete-orphan">
	<key column="eventid" />
	<one-to-many class="EventMediaVO"/>
</set>
J'ai ensuite une classe EventMediaVO qui contient une clé composée (eventid, mediaid et event_mediaweight) ainsi qu'une propriété event_mediapercent.

La clé composée est bien entendu sous forme de classe, EventMediaId. Elle est sous la forme suivante :

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
 
<composite-id name="id" class="EventMediaId">
 
	<!-- 
		many-to-one association about the event Value Object
        -->
	<key-many-to-one name="event" class="EventVO" lazy="false">
		<column name="eventid" />
	</key-many-to-one>
 
	<!-- 
		many-to-one association about the media Value Object
	-->
	<key-many-to-one name="media" class="MediaVO" lazy="false">
		<column name="mediaid" />
	</key-many-to-one>
 
	<key-property name="weight">
		<column name="event_mediaweight" unique="true"></column>
	</key-property>        		
 
</composite-id>

Le problème maintenant, c'est que chaque fois que je cherche à modifier la valeur "event_mediaweight", Hibernate, lorsque je passe par la méthode update, à la place de faire une mise à jour de cette valeur, va me créer un nouveau tuple.

Exemple :
Dans la table event_media, j'ai une valeur du type :

eventid = 1, mediaid = 1, weight = 0, percent = 100;

maintenant, je veux modifier weight pour le passer à 10 : (admettons le pseudo code suivant : myEvent.management[0].getId().setWeight( 10 ) ), et bien je me retrouve avec 2 enregistrements :

eventid = 1, mediaid = 1, weight = 0, percent = 100;
eventid = 1, mediaid = 1, weight = 10, percent = 100;

Alors que j'aimerai qu'il fasse une mise à jour tout simplement...

J'ai testé différentes méthodes pour résoudre le problème, mais sans succès... Soit il me fait une création d'un nouvel élément, soit il ne fait rien du tout... J'ai tenté différentes valeurs de cascade, telles que merge, save-update, mais le problème persiste...

Je précise encore que j'ai peu de marge de manoeuvre, car j'utilise LiveCycle data Services en relation avec Flex. La méthode update côté java est fonctionnelle (mis à part ce problème) mais la méthode merge me retourne un stackOverFlow et une exception du type UndeclaredThrowableException.

Si quelqu'un a une idée, je suis à l'écoute

D'avance merci pour vos lumières