Hibernate, spring, JPS & isolation - custom isolement non pris en charge
J'ai essayé ceci:
@Transactional(isolation=Isolation.SERIALIZABLE,
rollbackFor={Exception.class},
propagation=Propagation.REQUIRES_NEW)
sur mon service méthodes, mais le printemps se plaint en disant:
Standard JPA does not support custom isolation levels - use a special JpaDialect
Comment puis-je résoudre ce problème?
- +1: j'ai eu cela aussi. Mais le problème n'est pas dans mes tests d'unité, en dépit de l'aide de
AbstractTransactionalJUnit4SpringContextTests
, ce qui était bizarre. - amitstechblog.wordpress.com/2011/05/31/...
- J'ai essayé la solution sur Amit du blog, mais il fait toutes mes connexions de base de données en lecture seule. - Je gérer mon transactions à l'aide de l'AOP dans mon persistance de config.
Vous devez vous connecter pour publier un commentaire.
Cette mise en œuvre n'est pas de compte pour le nettoyage des trucs, j'ai mis en place une solution similaire, mais que les comptes pour le nettoyage en tant que bien.
Cette solution peut être trouvée ici:
http://shahzad-mughal.blogspot.com/2012/04/spring-jpa-hibernate-support-for-custom.html
Pas coutume niveaux d'isolation sont pris en charge par JPA. Vous pouvez étendre la
HibernateJpaDialect
classe et substituer liées à la connexion des méthodes de sorte que vous pouvez définir des niveaux d'isolement sur leConnection
Voici quelque chose que j'ai écrit, mais n'ont pas encore testé:
Et vous définissez la propriété de votre
EntityManagerFactory
:doWork()
ainsi je supposethis.getJdbcConnection(entityManager, definition.isReadOnly()).getConnection()
Dessin sur Bozho de réponse et en tenant compte des commentaires à ce sujet, La suite semble être une complète (Hibernate 4 compatible) solution répondant à la nécessité de réinitialiser la connexion. Mieux que je peux dire, le printemps d'une couche de l'appel en garantie de la cleanupTransaction méthode, mais si ce n'est pas effectivement garanti, cela peut besoin d'être repensée en raison du potentiel pour un permGen fuite de mémoire et de la demande post effets secondaires sur l'objet de connexion.
@Shahzad Moghol que je l'ai quitté deux points 😉 Votre réponse devrait être accepté comme correct. L'on a accepté la réponse sera à l'origine de l'-dessous de problème au hasard miss principaux développeurs de penser il y a des bugs avec pilote mysql par exemple:
Vous pouvez en savoir plus sur notre aventure avec cette question à http://thinkinginsoftware.blogspot.com/2013/10/connection-is-read-only-queries-leading.html
Lors de la spécification de la JpaTransactionManager avez-vous préciser un JPADialect? Par défaut, je pense qu'il utilise le DefaultJpaDialect et vous avez besoin de la HibernateJpaDialect.
Vous pouvez aussi envelopper la "source de données" de la fève à la "IsolationLevelDataSourceAdapter", simplement en faisant ceci:
où "_dataSource" est une référence à une source de données.