Bonjour à tous,

J'ai un petit souci concernant la mise à jour d'enregistrements par hibernate :


J'ai une table parc, avec une clé primaire "parc", et un champ libellé quelconque.
Elle est mappée comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
<hibernate-mapping>
    <class name="ft.webroutage.metier.Parc" table="PARC">
        <id name="parc" type="string">
            <column name="PARC" length="5" />
            <generator class="assigned" />
        </id>
        <property name="libelle" type="string">
            <column name="LIBELLE" length="50" />
        </property>
<hibernate-mapping>

Une petite précision : le champ parc est utilisé dans d'autres tables comme foreign key.
L'ennui, c'est que lorsque j'essaie de mettre à jour un enregistrement en changeant le champ "parc", il ne fait pas d'update, mais un nouvel insert, en conservant l'enregistrement précédent.
Exemple : j'ai dans ma table le couple PARC1/toto
Je veux changer (et non pas dupliquer) le parc1 en parc2. (le parc1 n'est utilis" dans aucune autre table)
Si je fais un saveOrUpdate de mon objet, j'obtiens en base deux enregistrements :
PARC1/toto
PARC2/toto
Si je fais un simple update, j'obtiens :
PARC1/toto (rien de modifié)
Et par un save, j'obtiens la même chose qu'avec le saveOrUpdate.

Je suppose que cela vient du fait qu'hibernate fasse un select sur la table avce la clé primaire avant de persister, et que ce problème doit être facile à contourner, et que ma question va vous sembler complètement idiote

Mais je débute, et je ne sais pas si cela vient du mapping (oubli de quelque chose?) ou d'autre chose

Sauriez-vous m'éclairer?


Merci par avance