+Exception的问题-前缀强制回滚,+前缀指定提交
你+的是Exception,意思应该是所有异常都不回滚,继续提交事务!

解决方案 »

  1.   

    hibernate默认是运行期异常才回滚事务的,你的应该是事务没有回滚,应该是配置的问题
      

  2.   

    这句话没起作用,你代码里根本没有annotation.
    <tx:annotation-driven transaction-manager="txManager"/> 
    <bean id="service" parent="proxyTemplate"> 
    <property name="target"> 
    <ref local="hstudao" /> 
    </property>

    这个给hstudao添加事务,和你帖出来dao.java有关系没?
    这个+三楼给出了解释
    <prop key="save*">PROPAGATION_REQUIRED,+Exception </prop> 
    把+Exception改成-Exception或删掉!因为Spring默认只回滚uncheck Exception,你的方法没有throws任何Exception,所以有异常的话只能是uncheck Exception你的配制文件有点乱,而且命名也有些问题。
    如果成功不了,把你的所有相关文件帖出来看看!
      

  3.   

    去掉或改成+,-Exception都不行
    好像在哪见过什么第二类事务回滚...
      

  4.   

    那只能是你的配置文件写错了,好好检查下,没有所谓的第二类事务那么一说:Rollback rules
    The final facet of the transaction pentagon is a set of rules that define what exceptions
    prompt a rollback and which ones do not. By default, transactions are rolled
    back only on runtime exceptions and not on checked exceptions. (This behavior
    is consistent with rollback behavior in EJBs.)
      

  5.   

    3楼正解-Exception。多看看AOP代理吧。
      

  6.   

    用AOP的声明式事务<tx:annotation-driven transaction-manager="transactionManager"/> 是可以达到事务控制;
    但是用spring的代理
    <bean id="proxyTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
    <property name="transactionManager">
    <ref bean="transactionManager" />
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="save*">PROPAGATION_REQUIRED</prop>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="remove*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>

    <prop key="insertSchool">PROPAGATION_REQUIRED</prop>
    <prop key="insertTeacher">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
    </property>
    <property name="target">
    <ref local="hstudao"/>
    </property>
    </bean>
    <bean id="hstudao" class="com.ydx.stu.HstuDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>做了很多次都不达到控制insertSchool这个插入的事务;不知道在哪个地方还有问题?????
      

  7.   

    这个问题3楼说明白,但是你为什么切dao呢,这有什么意义么,如果建议你加一个service层,因为一个service可能会调用dao的好几个方法,如果切dao会产生多个session连接,也就是会多次连接数据库,切service会只有一个连接,会更好的
      

  8.   

    多个session??不是Singleton的吗??这当前问题有什么关系??
      

  9.   

    Hibernate: select school_.id, school_.s_id as s2_0_, school_.s_name as s3_0_ from school school_ where school_.id=?
    Hibernate: insert into school (s_id, s_name, id) values (?, ?, ?)
    Hibernate: insert into teacher (t_name, t_s_id, t_id) values (?, ?, ?)
    2008-10-24 13:31:01,406 WARN  [main] util.JDBCExceptionReporter (JDBCExceptionReporter:71) - SQL Error: 1062, SQLState: 23000
    2008-10-24 13:31:01,406 ERROR [main] util.JDBCExceptionReporter (JDBCExceptionReporter:72) - Duplicate entry 'T1009' for key 1
    2008-10-24 13:31:01,406 ERROR [main] def.AbstractFlushingEventListener (AbstractFlushingEventListener:299) - Could not synchronize database state with session
    以上各位所说的方法都用过了,-Exception拉,service拉,还是不行,
    各位大侠帮看看怎么处理啊??或者帮up的都有分...........
      

  10.   

    我遇到与楼主一样的问题。也用了同样的配置,依然存在事务不一致问题。
    不知道hibernate对级联的语句是在何时产生的,这个是问题的关键。
    AOP拦截诸如save方法增加事务,其实是在方法调用前增加事务开始,调用后增加commit,出现异常则rollback。
    但遇到级联处理是单独在save方法完全执行完毕后才执行生成的语句,那么,在save方法已经成功执行后,就已经执行了commit,无论后面的语句发生了什么,都与这个语句无关了。
    所以,那个配置只是针对某一个方法单独的事务,而hibernate应该是在save方法后增加的语句,所以AOP事务管理也控制不到了。
    我也是初学者,这些只是我的一些浅见,希望能提供些线索。