version de Hibernate: 3.1.3
Base de données: Oracle 10g
Bonjour,
J'ai un objet que deux threads vont mettre à jour successivement. Dans l'un deux, je dispose de son identifiant unique (clef primaire) via une instance détachée et je souhait le modifier dans une session séparée. Le problème est que pour pouvoir le modifier puis le sauvegarder je dois d'abord le récupérer avec la méthode load de la nouvelle session. L'objet en référençant beaucoup d'autre et disposant en plus de sous-classes, Hibernate génère une requète SQL énorme qui pose des problèmes de performance.
La plupart des accès n'était que la mise à jour de certains attributs, j'ai implémenté un update en HQL se basant sur l'identifiant de l'objet. Mais cette approche ne tient pas compte de l'optimistic lock qui est utilisé sur toute l'application. Le champ version n'est plus maintenu et je crains des effets de bord...
Note : j'effectue parfois plusieurs mises à jour successives de l'objet, avant et après que l'autre thread l'ait modifié.
En attendant une meilleure option, je reste donc sur le code suivant qui fonctionne sans problème :
Code entre sessionFactory.openSession() et session.close():
Met metHibernate = (Met) session.load(Met.class, met.getIdInterne());
metHibernate.setStatut(statutMet);
tx.commit();
|