spring3 整合 hibernate4,事物不能回滚

markhai_85 2013-06-08

applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:tx="http://www.springframework.org/schema/tx" 

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:p="http://www.springframework.org/schema/p" 

xmlns:util="http://www.springframework.org/schema/util"

xmlns:tool="http://www.springframework.org/schema/tool" 

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans  

     http://www.springframework.org/schema/beans/spring-beans.xsd  

     http://www.springframework.org/schema/tx  

     http://www.springframework.org/schema/tx/spring-tx.xsd  

     http://www.springframework.org/schema/aop  

     http://www.springframework.org/schema/aop/spring-aop.xsd  

     http://www.springframework.org/schema/jee  

     http://www.springframework.org/schema/jee/spring-jee.xsd  

     http://www.springframework.org/schema/context  

     http://www.springframework.org/schema/context/spring-context.xsd  

     http://www.springframework.org/schema/util  

     http://www.springframework.org/schema/util/spring-util.xsd  

     http://www.springframework.org/schema/tool  

     http://www.springframework.org/schema/tool/spring-tool.xsd"

default-lazy-init="false" default-autowire="byName">

 

 <context:property-placeholder location="classpath:jdbc.properties,classpath:application.properties" file-encoding="utf-8"/>

<context:component-scan base-package="action.*"></context:component-scan>

<context:component-scan base-package="service"></context:component-scan>

<context:component-scan base-package="hibernate"></context:component-scan>

 

<context:annotation-config />

 

<!-- C3P0 -->

<bean 

id="dataSource" 

class="com.mchange.v2.c3p0.ComboPooledDataSource"

p:driverClass="${jdbc.driver}" 

p:jdbcUrl="${jdbc.url}" 

p:user="${jdbc.username}" 

p:password="${jdbc.password}" 

p:acquireIncrement="${c3p0.acquireIncrement}" 

p:initialPoolSize="${c3p0.initialPoolSize}" 

p:minPoolSize="${c3p0.minPoolSize}" 

p:maxPoolSize="${c3p0.maxPoolSize}"

p:maxIdleTime="${c3p0.maxIdleTime}" 

p:idleConnectionTestPeriod="${c3p0.idleConnectionTestPeriod}"

p:maxStatements="${c3p0.maxStatements}" 

p:numHelperThreads="${c3p0.numHelperThreads}" 

p:autoCommitOnClose="${c3p0.autoCommitOnClose}"

destroy-method="close" />

 

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource" ref="dataSource"/>

</bean>

 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" p:dataSource-ref="dataSource" >

 

<!-- 大写自动变成小写并加上下划线-->

<property name="namingStrategy">

<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />

</property> 

 

<property name="hibernateProperties">

<props>

<prop key="hibernate.connection.pool_size">${hibernate.connection.pool_size}</prop>

<prop key="hibernate.c3p0.min_size">${hibernate.c3p0.min_size}</prop>

<prop key="hibernate.c3p0.max_size">${hibernate.c3p0.max_size}</prop>

<prop key="hibernate.c3p0.max_statements">${hibernate.c3p0.max_statements}</prop>

<prop key="hibernate.c3p0.timeout">${hibernate.c3p0.timeout}</prop>

<prop key="hibernate.c3p0.idle_test_period">${hibernate.c3p0.idle_test_period}</prop>

<prop key="hibernate.c3p0.acquire_increment">${hibernate.c3p0.acquire_increment}</prop>

 

<prop key="hibernate.dialect">${hibernate.dialect}</prop>

<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>

<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>

<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>

<prop key="hibernate.default_schema">${hibernate.default_schema}</prop>

<prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>

<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>

<prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>

<prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>

<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>

<prop key="hibernate.order_updates">${hibernate.order_updates}</prop>

<prop key="hibernate.query.factory_class">${hibernate.query.factory_class}</prop>

<prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults}</prop>

<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>

<prop key="javax.persistence.validation.mode">none</prop>

</props>

</property>

 

<property name="packagesToScan" value="entity"/>

</bean>

 

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

 

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes> 

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="execute*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

<tx:method name="find*" propagation="REQUIRED" read-only="true"/>

</tx:attributes>

</tx:advice>

 

<aop:config proxy-target-class="true">

<aop:pointcut id="daoMethods" expression="execution(* hibernate.Dao.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" />

</aop:config>

 

</beans>

 

 

 

 

 

在action中,

先成功保存一个user,

保存第二个user时,报错。

事物没有回滚,数据库中已有第一个user的信息。

 

请各位指教!

Global site tag (gtag.js) - Google Analytics