问题描述
我估计让程序报错但是数据没有回滚,是为什么,配置事务的成功例子我都有,网上的解答我基本都看过了,但是还是解决不了,拿出来跟大家分享一下,看大家能解决么??这是service里的publicvoidmodifyRoleMenus(Stringid,Stringmenuids)throwsException{if(null!=id&&menuids!=null){Queryquery=cashFlowDao.session().createSQLQuery("deletefromRESOURSE_ROLErrwhererr.roleid=?");query.setString(0,id);query.executeUpdate();inta=1/0;String[]mids=menuids.split(",");//选中一个菜单时至少带着父节点for(inti=0;i<mids.length;i++){if(!"".equals(mids[i])){ResourceRolerr=newResourceRole();rr.setRoleid(id);rr.setZyid(mids[i]);cashFlowDao.save(rr);}}}}这是basedao里的publicSessionsession(){Sessionsession=super.getHibernateTemplate().getSessionFactory().openSession();returnsession;}<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"ref="sessionFactory"/></bean><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><!--得到数据--><tx:methodname="find*"propagation="REQUIRED"read-only="true"/><tx:methodname="get*"propagation="REQUIRED"read-only="true"/><!--创建数据--><tx:methodname="create*"propagation="REQUIRED"rollback-for="Exception"/><tx:methodname="add*"propagation="REQUIRED"rollback-for="Exception"/><!--更新数据--><tx:methodname="update*"propagation="REQUIRED"rollback-for="Exception"/><tx:methodname="change*"propagation="REQUIRED"rollback-for="Exception"/><!--保存操作,可能涉及到数量的数据变化--><tx:methodname="save*"propagation="REQUIRED"rollback-for="Exception"/><tx:methodname="insert*"propagation="REQUIRED"rollback-for="Exception"/><tx:methodname="modify*"propagation="REQUIRED"rollback-for="Exception"/></tx:attributes></tx:advice><aop:configproxy-target-class="true"><!--@expression="execution(*包名..*(..))"--><aop:pointcutid="allManagerMethod"expression="execution(*qingfu.financing.service.*.*(..))"/><aop:advisoradvice-ref="txAdvice"pointcut-ref="allManagerMethod"/><!--<aop:advisoradvice-ref="theBeforeAdvice"pointcut-ref="allManagerMethod"/>--></aop:config><!--注意下面的配置--><aop:aspectj-autoproxyproxy-target-class="true"/>
解决方案
解决方案二:
打开LOG4J的DEBUG功能,看看到底有没有为这个方法开启事务吧。
解决方案三:
这样配置貌似没啥问题。。。
解决方案四:
publicSessionsession(){Sessionsession=super.getHibernateTemplate().getSessionFactory().openSession();returnsession;}
这里不应该是openSession(),应该是getCurrentSession(),直接openSession就跟spring事务控制没啥关系了。
解决方案五:
···你都用了声明式事物为什么还要自己创建事物啊