Le 23/04/2012 14:21, Florian Desbois a écrit :
La méthode merge[1] est un peu différente de saveOrCreate[2] et permet de pouvoir rattacher les objets correctement et d'éviter les problèmes sur les cascade. En effet, la méthode update pose problème sur les objets modifiés en cascade (déjà rattaché à la session) et n'effectue pas les suppressions. Un post intéressant sur les différences : [3]
Aujourd'hui, le fait de remplacer saveOrUpdate() par merge() à l'air de corriger pal mal d'exceptions: Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.chorem.lima.entity.FinancialPeriodImpl#org.chorem.lima.entity.FinancialPeriod#1336990931444#0.9703140360262918] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com