Ped*_*dez 2 java spring hibernate mybatis jakarta-ee
我想使用 Hibernate 和 MyBatis 与 Spring 集成来构建一个应用程序。在原型中,我必须运行它们,但不能一起运行。我的Spring应用上下文是:
\n\n <?xml version="1.0" encoding="UTF-8"?>\n<!--\n Document : applicationContext-spring.xml\n Created on : 26 de diciembre de 2012, 15:49\n Author : Pedro Fdez\n Description:\n Fichero de configuraci\xc3\xb3n de Spring\n-->\n<beans xmlns="http://www.springframework.org/schema/beans"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xmlns:aop="http://www.springframework.org/schema/aop"\n xmlns:context="http://www.springframework.org/schema/context"\n xmlns:tx="http://www.springframework.org/schema/tx"\n xsi:schemaLocation="http://www.springframework.org/schema/beans \n http://www.springframework.org/schema/beans/spring-beans-3.0.xsd\n http://www.springframework.org/schema/aop \n http://www.springframework.org/schema/aop/spring-aop-3.0.xsd\n http://www.springframework.org/schema/context \n http://www.springframework.org/schema/context/spring-context-3.0.xsd\n http://www.springframework.org/schema/tx \n http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-autowire="byName">\n\n <context:annotation-config />\n <context:component-scan base-package="com.administracion.model.dao.implementations" />\n <tx:annotation-driven transaction-manager="txManagerHibernate"/>\n <aop:aspectj-autoproxy /> \n\n <!-- ............................ -->\n <!-- Configuraci\xc3\xb3n de datasource -->\n <!-- ............................ -->\n <bean id="dataSource"\n class="org.apache.commons.dbcp.BasicDataSource"\n destroy-method="close">\n <property name="driverClassName" value="${jdbc.driverClassName}"/>\n <property name="url" value="${jdbc.url}"/>\n <property name="username" value="${jdbc.username}"/>\n <property name="password" value="${jdbc.password}"/>\n </bean>\n\n <!-- .......................... -->\n <!-- Configuraci\xc3\xb3n de Hibernate -->\n <!-- .......................... -->\n\n <!-- SessionFactory de Hibernate -->\n <bean id="sessionFactoryHibernate"\n class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">\n <property name="dataSource" ref="dataSource"/>\n <property name="hibernateProperties">\n <props>\n <prop key="hibernate.dialect">${hibernate.dialect}</prop>\n </props>\n </property>\n\n <property name="packagesToScan">\n <list>\n <value>com.administracion.model.pojos</value>\n </list>\n </property>\n </bean>\n <!-- Gestor transaccional de Hibernate -->\n <bean id="txManagerHibernate"\n class="org.springframework.orm.hibernate3.HibernateTransactionManager">\n <property name="sessionFactory" ref="sessionFactoryHibernate"/>\n </bean>\n\n <!-- ........................ -->\n <!-- Configuraci\xc3\xb3n Mybatis -->\n <!-- ........................ -->\n\n <!-- Gestor transaccional de MyBatis -->\n <bean id="txManagerMyBatis"\n class="org.springframework.jdbc.datasource.DataSourceTransactionManager">\n <property name="dataSource" ref="dataSource" />\n </bean>\n <tx:advice id="txAdviceMyBatis" transaction-manager="txManagerMyBatis">\n <tx:attributes>\n <tx:method name="*" />\n </tx:attributes>\n </tx:advice>\n <aop:config>\n <aop:pointcut id="transactionPointCut"\n expression="execution(* com.administracion.model.dao.interfaces.*.*(..))" />\n <aop:advisor advice-ref="txAdviceMyBatis" pointcut-ref="transactionPointCut" />\n </aop:config>\n\n <!-- SessionFactory de MyBatis -->\n <bean id="sqlSessionFactoryMyBatis" class="org.mybatis.spring.SqlSessionFactoryBean">\n <property name="configLocation" value="classpath:conf/mybatis/mybatis-config.xml" />\n <property name="dataSource" ref="dataSource" />\n </bean>\n\n <!-- MapperFactory de Mybatis -->\n <bean id="profesionMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">\n <property name="sqlSessionFactory" ref="sqlSessionFactoryMyBatis" />\n <property name="mapperInterface" value="com.administracion.model.dao.mappers.IProfesionMapper" />\n </bean> \n\n\n <bean id="profesionService" class="com.administracion.model.dao.implementations.ProfesionDaoImpl">\n <property name="profesionMapper" ref="profesionMapper" />\n </bean>\n <!-- Declaramos la exportaci\xc3\xb3n del servicio v\xc3\xada RMI -->\n <bean class="org.springframework.remoting.rmi.RmiServiceExporter">\n <property name="registryPort" value="${rmi.port.default}"/>\n <!-- Interface del servicio que exportamos -->\n <property name="serviceInterface" value="com.administracion.model.dao.interfaces.IProfesionDao"/>\n <!-- Nombre con que el servicio se va a llamar desde afuera -->\n <property name="serviceName" value="ProfesionService"/>\n <!-- Nombre del bean de la implementaci\xc3\xb3n que le hemos dado en el contexto de spring -->\n <property name="service" ref="profesionService"/>\n </bean>\n\n</beans>\nRun Code Online (Sandbox Code Playgroud)\n\n这样,每个人都有自己的事务管理器和会话工厂。这是错误的,因为在嵌套事务中可以运行多个事务,例如:
\n\n休眠事务
\n\n如果mybatis事务发生异常,它会回滚,但hibernate不会回滚。
\n\n他在这个论坛上读过一篇关于如何在 Hibernate 和 MyBatis 之间共享事务的帖子,但我不明白。
\n\n有人可以告诉我一些链接或解决此问题的任何信息吗?
\n\n请原谅我的英语。这很糟糕。
\n\n提前致谢。
\n\n佩德罗·J.Fdez。\n马德里。西班牙。
谷歌搜索我找到了解决方案。大问题,简单的解决方案。
<!--
<bean id="txManagerMyBatis"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
-->
<tx:advice id="txAdviceMyBatis" transaction-manager="txManagerHibernate">
Run Code Online (Sandbox Code Playgroud)
基本上,注释 MyBatis 事务管理器并将其粘贴到 Hibernate 事务管理器上。
我希望这对某人有帮助。
| 归档时间: |
|
| 查看次数: |
4755 次 |
| 最近记录: |