Plusieurs transactions dans une seule session d'hibernation (avec Spring)
Est-il possible de modéliser la suite de l'utilisation d'Hibernate + Printemps.
- Session ouverte
- Begin transaction
- Faire un peu de travail
- Commettre
- Begin transaction
- Plus de travail
- Commettre
- Fermer la session
- Je utiliser le Printemps TransactionTemplate qui assure à la fois la session + transaction durée de vie de portée.
La raison en est que, parfois, j'ai quelques étapes dans un processus d'entreprise et je voudrais valider après chaque étape se termine. Cependant, je voudrais continuer à utiliser les mêmes objets persistants. Si j'ai une session séparée par transaction puis-je obtenir transitoire/détaché des exceptions, car la session d'origine a été fermé.
Est-ce possible?
source d'informationauteur Mike Q
Vous devez vous connecter pour publier un commentaire.
Oui, Hibernate Séances peuvent commencer et de s'engager plusieurs transactions. Ce que vous devez faire est d'ouvrir un magasin de session quelque part, puis les réutiliser. Remarque, que la Session n'est pas thread-safe de l'objet, mais si vous êtes sûr qu'il ne sera pas avoir de problèmes avec la concurrence, ce que vous avez besoin est juste d'utiliser
TransactionSynchronizationUtils
pour lier une session sur le thread des ressources et alors dissocier lorsque vous le souhaitez, vous pouvez trouver un exemple ici ou vous pouvez prendre un coup d'oeil à OSIV et sa mise en œuvre standard.C'est très compliqué, c'est beaucoup plus facile et donc souhaitable que vous fermez votre session tout de suite et ne pas la réutiliser, car elle peut amener des ennuis:
Que vous pourriez réaliser cela à l'aide de la OpenSessionInView modèle. Spring fournit un javax.servlet.Filtre de mise en œuvre que vous pourriez utiliser si vous travaillez dans un environnement de servlet (question de ne pas le dire). Cela permettra d'assurer que votre session Hibernate est maintenu ouvert pendant toute la durée de la requête, plutôt que juste pour une transaction individuelle.
La Javadoc sur ce classe est très complet et peut être un bon point de départ.