J'utilise Hibernate et Mybatis pour le Daocouche, tout à fait avec Spring 3. Toutes les configurations de beans sont via XML. L’intégration entre Hibernate et Mybatis n’a aucun problème lorsque nous déclarons ces beans dans le même fichier XML. J’ai essayé de les découpler dans différents fichiers et un problème est survenu lors des tests d’intégration, car nous ne pouvons pas exécuter les tests pour MyBatis car il manque pour transactionManager
haricot. Lorsque la configuration était dans un seul fichier, cela ne posait aucun problème car nous avons ceci:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!--
sessionFactory bean is provided by Hibernate configuration.
Problem: when decoupling the configuration, there"s no
transactionManager bean and the tests fail.
-->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Après avoir scindé la configuration, j’ai résolu ce problème dans l’environnement de test en redéfinissant la transactionManager
haricot dans MyBatis config xml.
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource" />
</bean>
Mais maintenant, j'ai un test unitaire où Hibernate et Mybatis sont requis. Comment puis-je éviter la création de transactionManager
défini dans la configuration MyBatis pour n'utiliser que transactionManager
défini dans la configuration d'Hibernate?
Réponses:
0 pour la réponse № 1Je diviserais le transactionManager
définition de haricot dans un troisième fichier. Vous devez donc charger deux fichiers (hibernate + transactionManager ou iBatis + transactionManager) ou trois fichiers (hibernate + iBatis + transactionManager) selon vos besoins. le transactionManager
peut également être déclaré dans un fichier de ressort "commun"c'est toujours importé. C’est l’approche que j’avais utilisée dans le passé. J’ai vu des articles sur la façon de remplacer les définitions de bean Spring, mais la plupart des gens la recommandent contre.