Bonjour @ tous,
J'utilise Spring Hibernate dans un contexte JTA.
Le cas classique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <bean id="myEmf" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="myPersistenceUnit" /> </bean> <bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="myEmf" /> </bean> <tx:annotation-driven transaction-manager="myTxManager" />
Lors de l'utilisation de @Transactional
Un begin est effectué au début de la méthode
Un commit est effectué à la sortie de la méthode
Tout ca est transparent et trés bien géré par Aop
Par contre comment forcer le commit lors d'un traitement de gros volume de données.
En effet si au bout du 10000eme éléments, une exception est levée ( sur une contrainte d'intégrité par ex)
-> alors l'exception est remontée et le rollback sera effectué sur l'ensemble des eléments.
Il semble que si l'on utilise JTA on ne puisse pas agir de manière programmatique sur les transactions.
Comment faire ?
Ps:
1/
J'ai testé au travers d'un catch de trapper l'exception et d'utiliser l'option
@Transactional(noRollbackFor="monexception")
Le Roolback est toujours effectif
2/
J'ai tenter de "piloter" la transaction em.getTransaction().commit();
Pas le droit !!
Merci pour vos remarques.
Partager