Printemps+JPA @Transactional pas commettre
Je comprends la question similaire a été demandé avant ici, mais je ne pouvais pas trouver la solution à mon problème. En gros, je suis en train d'utiliser JPA par Hibernate au Printemps, mais les données sont pas être persisté pour une raison quelconque.Tournant sur le niveau de debug printemps transaction ne révèle rien d' - EntityManager ouvert et fermé, mais rien d'aussi loin que le gestionnaire de transactions de soucis ... je suis sûr que je manque quelque chose de grand, de toute aide est appréciée! consultez la rubrique suivante pour plus de détails.
TIA
Oliver
La mise de base est comme suit: catégorie FooDaoJPA
s’enregistrer les appels de fonction hors entityManager.persist(object)
de persister l'objet.
classe FooServiceImpl
implémente l'interface de service par:
@Transactional(rollbackFor = DataAccessException.class,
readOnly = false, timeout = 30,
propagation = Propagation.SUPPORTS,
isolation = Isolation.DEFAULT)
public void saveFoo(Foo foo) throws DataAccessException {
fooDao.save(foo);
}
De noter que fooDao
est injecté par le Printemps Cio
Enfin contrôleur est injecté un FooService
et appel saveFoo()
pour conserver les données.
Configuration JPA
<!-- JPA Entity Manager Factory -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="feDataSource"/>
<!-- Transaction Config -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>
<tx:annotation-driven mode="aspectj"
transaction-manager="transactionManager"/>
- supprimer rollbackFor = DataAccessException.class et surround dao appel avec des try catch pour but de débogage
Vous devez vous connecter pour publier un commentaire.
Note le
mode="aspectj"
dans votre configuration. Il nécessite une configuration supplémentaire et, habituellement, vous ne devriez pas l'utiliser à moins que vous comprenez ce que signifie-t-il et pourquoi vous en avez besoin. Voir 10.5.6 À L'Aide De @Transactional.La première chose qui ressemble à un problème potentiel est votre configuration de propagation. Voici une documentation démontrant les valeurs que vous pouvez spécifier:
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/annotation/Propagation.html
Note que vous avez spécifié prend en charge le "Soutien d'une opération courante, d'exécuter des non-transactionnelle et si il n'en existe pas". Vous voulez probablement NÉCESSAIRE, qui est la valeur par défaut, et la volonté d'utiliser une transaction existante ou en créer un s'il n'existe pas actuellement.
Dans mon cas:
En utilisant JPA, Spring MVC - tous mes tests et le code fonctionnait bien sans erreur symptôme s'engage aurait tout simplement pas l'enregistrer dans la base de données peu importe ce que j'ai essayé.
J'ai dû ajouter
à mon applicationContext.xml et cglib-nodep-2.1_3.jar aopalliance-1.0.jar
Certainement la solution dans mon cas. Sans annotation-driven Printemps aura pas de scanner pour le @Transactional annotation