请教为什么事务不能回滚
<!-- 数据库连接池配置 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@localhost:1521:orcl</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>root</value></property>
</bean>
<!-- Spring 事务管理 -->
<bean id="dbTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置Spring的事务代理 -->
<bean id="accountservice" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
<property name="transactionManager" ref="dbTransactionManager"/>
<property name="target" ref="testDaoImpl"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
public void insertStudent(){
try{
String sql = "insert into student (snum, sname, sage, ssex) values('9','test1','39','男')";
jdbcTemplate.update(sql);
jdbcTemplate.update(sql);
}catch(Exception exception){
exception.printStackTrace();
}
}
<!-- 数据库连接池配置 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@localhost:1521:orcl</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>root</value></property>
</bean>
<!-- Spring 事务管理 -->
<bean id="dbTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置Spring的事务代理 -->
<bean id="accountservice" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
<property name="transactionManager" ref="dbTransactionManager"/>
<property name="target" ref="testDaoImpl"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
public void insertStudent(){
try{
String sql = "insert into student (snum, sname, sage, ssex) values('9','test1','39','男')";
jdbcTemplate.update(sql);
jdbcTemplate.update(sql);
}catch(Exception exception){
exception.printStackTrace();
}
}
<!--
<bean id="accountservice" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
<property name="transactionManager" ref="dbTransactionManager"/>
<property name="target" ref="testDaoImpl"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
-->@Transactional
public void insertStudent(){
try{
String sql = "insert into student (snum, sname, sage, ssex) values('9','test1','39','男')";
jdbcTemplate.update(sql);
jdbcTemplate.update(sql);
}catch(Exception exception){
exception.printStackTrace();
}
}先这样,用另外一种声明式事务,看看是那段配置的原因,还是其他的原因,然后我们在仔细看看原因
还有就是ISOLATION_SERIALIZABLE 这些的含义是什么public void insertStudent(){
DefaultTransactionDefinition td = new DefaultTransactionDefinition(
TransactionDefinition.PROPAGATION_REQUIRED);
td.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);
td.setTimeout(10);
TransactionStatus status = transactionManager.getTransaction(td);
try{
String sql = "insert into student (snum, sname, sage, ssex) values('10','test1','39','男')";
jdbcTemplate.update(sql);
jdbcTemplate.update(sql);
}catch(Exception exception){
transactionManager.rollback(status);
exception.printStackTrace();
}
}
http://hi.baidu.com/landor2004/blog/item/0a1dd3d73f18efd8a144df03.html这种事务配置方式已经很少使用,应为spring2.0以上版本已经有更简单的AOP配置方式,具体楼主可以看spring2.0或者2.5的中文参考手册