Bonjour à tous,
J'utilise Hibernate 3.0, sur un Websphere 5.0.2 lié à un DB2.
Je rencontre une exception lorsque je met à jour une table via un système de delete / insert.
Mettons que mon objet metier soit Object, et que j'ai une liste listeObjetaEffacer et une listeObjetAInserer.
J'ai dans le code :
boucle sur listeObjetaEffacer
session.delete(objet)
session.flush
finboucle
boucle sur listeObjetAInserer.
session.saveOrUpdate(objet)
session.flush
finboucle
En résumé c ca. Au début j'avais ca :
boucle sur listeObjetaEffacer
session.delete(objet)
finboucle
session.flush
boucle sur listeObjetAInserer.
session.saveOrUpdate(objet)
finboucle
session.flush
Mais ca plantait trop souvent :)
Mon problème : c'est un bug aléatoire. Souvent, je plante dans les update, et alors que j'ai pas commité (au contraire, l'exception fait un rollback) les deletes sont quand meme realises. J'obtiens la trace suivante :
[12/05/05 17:48:12:139 CEST] 142ceb03 AbstractFlush E org.hibernate.event.def.AbstractFlushingEventListener TRAS0014I: L'exception suivante a été consignée : org.hibernate.cache.CacheException: java.lang.IllegalStateException: The org.hibernate.cache.UpdateTimestampsCache Cache is not alive.
at org.hibernate.cache.EhCache.put(EhCache.java:155)
at org.hibernate.cache.UpdateTimestampsCache.preinvalidate(UpdateTimestampsCache.java:54)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:675)
Alors, je flushe trop ou pas assez souvent, je l'utilise mal ?
Je ne devrais pas utiliser le saveOrUpdate ?
Pourquoi ce bug est alétaoire ?
Enfin voila, merci de m'eclairer si vous le pouvez !
|