-
Hibernate et le cache
Bonjour a tous je souhaiterai savoir comment réglé le probleme suivant avec hibernate.
Lorsque j'insere une entité "Personne" dans ma base de donnée au travers mon application, je peux la retrouver par la méthode list().
Cependant imaginons que si l'on insere une entité Personne par un autre biais (webapp, ou une autre session hibernate), et que j'effectue un list() dans la premiere session (cité ci dessu ) , la derniere entité n'apparaitra pas . Je suis obligé de quitter et de relancer une session pour la voir apparaitre.
j'ai comme l'impression que hibernate ne se synchronise pas avec la base quand j'effectue un list().
pouvez vous m'aider sur ce probleme
merci d'avance.
-
Tu ne fermes jamais ta session ?
En général, la session est censée avoir une durée de vie relativement courte.
-
Hibernate a un cache, donc si tu fait une fois un list(), puis une autre webapp fait un insert, puis tu refait un list(), c'est normal que Hibenrate te retourne la même chose.
Deux option s'offrent à toi : configurer le cache pour qu'il rafraichissent plus souvent ses données (la configuration se fait à la seconde ou la milliseconde prés) ou désactiver le cache.
Par défault, hiebrnate utilise ehcache, voir le site d'ehcache pour la cofniguration. Sinon, jette un coup d'oeil à la doc d'hibernate ou à un tutoriel (par exemple sur developpez) pour savoir comment désactiver le cache.
-
Bon je ne sais pas quelle base tu utilises, mais j'ai déjà rencontré ce problème avec MySql et des sessions hibernate longues.
Il faut que tu changes l'isolation transactionnelle de Mysql (REPEATABLE-READ -> READ-COMMITED)
Edit : grosso modo tant qu'il n'y a pas de commit tu ne vois pas les modifications des autres connections.
-
A ta place, je ne toucherais pas aux propriétés de Mysql.
Ce n'est pas un problème lié à Mysql, ni à Hibernate. C'est du à l'utilisation
de session longue. (j'espère que c'est le cas)
La session ne peut pas être au courant de ce que font les autres.
Essaie de rafraichir la session ou de la vider.
-
Fr1man -> oui tu as raison ce n'est pas bien d'utiliser des sessions longues surtout si c'est pour afficher une liste de personnes.
Ah le problème du cycle de vie de la session ...
-
merci pour vos réponse . je vais tenter tout cas quand j'aurai 5 min
je vous tiens au courant
merci encore !