现在的位置: 首页 > 综合 > 正文

Spring整合Hibernate时,配置事务处理

2013年07月28日 ⁄ 综合 ⁄ 共 3618字 ⁄ 字号 评论关闭

1. 首先在web.xml里面配置一个context-param节点,允许工程有多个spring配置文件,工程比较多的话可能会分很多模块,那每个模块都用一个 applicationContext-层次名-模块名.xml,例如 applicationContext-service-som.xml、applicationContext-action-som.xml等。

 

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

 

2. 在hibernate 数据源的配置文件(这里取名为 applicationContext-resource.xml)

 

<!--一些model配置-->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSourceDemo" />
        <property name="mappingResources">

        <property name="mappingResources">
            <list>
                <value>com/sshDemo/erp/som/model/SomXXXXX.hbm.xml</value>
                <value>com/sshDemo/erp/ivc/model/IvcXXXXX.hbm.xml</value>
                <value>com/sshDemo/erp/ivc/model/IvcXXXXXX.hbm.xml</value>

            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.connection.release_mode">auto</prop>
                <prop key="hibernate.transaction.auto_close_session">true</prop>
                <prop key="show_sql">true</prop>
            </props>
        </property>

</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

<!-- doing standard CRUD 配置HibernateTemplate.所有DAO层类的基类-->
    <bean id="baseDaoHibernate" class="com.synnex.erp.core.dao.BaseDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

<!--配置 jdbcTemplate-->

<bean id="jdbcWrapper" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSourceDemo" />
    </bean>

<!--配置service层的事务处理类的基类-->

<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="remove*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

 

 

3. 配置好数据源后,现在真正配置需要做事务保护的service层的类。假设类的接口类 somXXXXService,配置service层遵循 接口名-实现类的方式。给该类配置一个**TX类(其实还是该类本身,不过是真正做事务处理的实例),DAO配置这里省略。

 

  <bean name="somOFDEService"
        class="com.synnex.erp.cg.som.service.impl.SomXXXXServiceImpl">
        <property name="kimXXXXDAO" ref="kimXXXXDAO" />

        <property name="somXXXXServiceTX" ref="somXXXXServiceTX" />
    </bean>

<!--这里的 baseTxService 是上面applicationContext-resource.xml配置过的事务基类-->

<bean id="somXXXXServiceTX" parent="baseTxService"
        singleton="false">
        <property name="target">
            <bean
                class="com.synnex.erp.cg.som.service.impl.SomXXXXServiceImpl">
                <property name="kimXXXXDAO" ref="kimXXXXDAO" />
            </bean>
        </property>
        <property name="transactionAttributes">
            <props>

                <!--这里的key就是需要做事务保护的serviceTX里面的方法名-->
                <prop key="doBatchInsertTX">PROPAGATION_REQUIRED</prop>
                <prop key="doDeleteTX">PROPAGATION_REQUIRED</prop>
                <prop key="doUpdateTX">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

 

4. 配置好了后,somXXXXServiceTX.doBatchInsertTX运行时则受事务保护。

 

说明:做j2ee轻量级开发一般都会使用 Hibernate+spring来做,那事务保护基本是比做的工作哦,在这里做个小结。

 

 

 

抱歉!评论已关闭.