Nous utilisons Hibernate avec Spring pour notre application Java. Nous découvrons que lorsqu'une session de mise à jour quelque chose dans la base de données d'autres sessions ne peut pas voir la mise à jour. Par exemple user1 obtient le solde du compte de la base de données puis user2 augmente le solde, si user1 obtient l'objet une autre fois il voit le solde du compte avant la mise à jour (semble que la session utilise la valeur de son cache) nouveau solde du compte. User1 utilise une session pendant toute activité différente de la session utilisateur2. Y a-t-il une configuration à forcer pour obtenir l'objet mis à jour de la base de données? ou toute autre aide?Hibernate + Spring + session + cache
Répondre
Cela est par nature (pensez à Session comme "unité de travail"); Les sessions doivent être isolées des transactions. C'est l'une des nombreuses raisons pour lesquelles les sessions devraient être de courte durée. J'ai l'impression que vous utilisez des séances de longue durée.
Mais dans tous les cas, vous pouvez forcer l'autre session (user1 dans votre cas) à actualiser son état du compte en utilisant session.refresh(theAccount);
. REFRESH est aussi une action cascadable, si vous avez besoin d'un état dépendant pour être rafraîchi lorsque vous actualisez le compte ...
Si vous utilisez une seule session pour toutes les activités, ce que vous voyez est à prévoir.
La session 1 charge l'objet qui est ensuite modifié par la session 2. Toutefois, la session 1 est toujours ouverte l'objet se trouve dans le cache de session (premier niveau). Vous pouvez actualiser Session1 en utilisant session.clear()
puis, si vous rechargez l'objet, vous obtiendrez la version mise à jour.
Cette dernière déclaration n'est pas exacte Alex dans le cas que vous proposez puisqu'ils ont juste effacé() l'ancien état de compte et l'ont rechargé de la base de données * avec la nouvelle version * –
Désolé. C'était un aparté basé sur le partage du même objet sans rechargement. J'aurais dû être clair. –
Je l'ai supprimé car il n'ajoute aucune valeur de toute façon! –
- 1. Cache inattendu par Hibernate + Spring
- 2. Spring + gestion de session Hibernate
- 3. spring hibernate - session de partage beeween DAOs
- 4. Spring Config pour la session Hibernate
- 5. Spring & Hibernate: aucune session liée au thread
- 6. Gestion de session dans Hibernate avec Spring
- 7. Hibernate HQL frappe ne cache de session
- 8. Spring + Hibernate: aucune session Hibernate liée au thread
- 9. Spring + Hibernate avec annotations: No Hibernate Session lié à thread
- 10. Spring Hibernate JPA Vs Spring Hibernate
- 11. Configuration Spring and Hibernate
- 12. Spring + Hibernate + Spring
- 13. Spring Autowiring + Hibernate Rechercher
- 14. Spring & Hibernate Evénements EJB
- 15. spring + hibernate + infinispan comme cache de second niveau
- 16. Comment effacer tout le cache Hibernate (ehcache) en utilisant Spring?
- 17. Spring JPA cache de requêtes Hibernate does't travail
- 18. Utilisation de Spring + Hibernate Cache transactionnel dans Tomcat?
- 19. Cache Hibernate L1 prérempli
- 20. Session Flaky Hibernate?
- 21. hibernate, spring - transaction
- 22. Spring + Hibernate gestion de session sur plusieurs threads
- 23. Obtention d'une session dans Hibernate Listener avec intégration Spring
- 24. Hibernate, Spring et Struts, Aucune session liée à fileter
- 25. Spring + Hibernate ne pas ouvrir automatiquement la session
- 26. NamedParameterJDBCTemplate de Spring rejoindre la session de Hibernate?
- 27. Spring, plusieurs Hibernate Sessionfactories configuration
- 28. Hibernate requête et confusion de cache de session
- 29. Cache de premier niveau Hibernate
- 30. Hibernate Session
valider chaque transaction exécutée avec DB. – Ved
Veuillez préciser les limites des transactions/sessions en termes d'ouverture/fermeture, de sélection/mise à jour/insertion des heures des deux clients et le niveau d'isolation des transactions que vous utilisez. – tscho