请教为什么事务不能回滚
<!-- 数据库连接池配置 -->
<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();
}
}

解决方案 »

  1.   

    呵呵,这个需要一点点调试;   先注释掉这段;
        <!-- 
        <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();
            }
        }先这样,用另外一种声明式事务,看看是那段配置的原因,还是其他的原因,然后我们在仔细看看原因
      

  2.   

    编程式的事务回滚了,请教下是怎么回事
    还有就是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();
    }
    }
      

  3.   

    ISOLATION_SERIALIZABLE:这是事务的隔离级别是最高级别,也就是说当你执行操作时候,数据库将采用范围锁RangeS RangeS_S模式
    http://hi.baidu.com/landor2004/blog/item/0a1dd3d73f18efd8a144df03.html这种事务配置方式已经很少使用,应为spring2.0以上版本已经有更简单的AOP配置方式,具体楼主可以看spring2.0或者2.5的中文参考手册