zzzzzqiu 2009-07-29 17:34
浏览 204
已采纳

spring+hibernate的事务回滚

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
        <tx:method name="find*" read-only="true"/>
    </tx:attributes>
</tx:advice>


<!-- applicationContext.xml哪些类的哪些方法参与事务 -->
<aop:config>
    <aop:pointcut id="allServiceMethod" expression="execution(* com.szhtp.wiki.service.impl.*.*(..))"/>
    <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/>
</aop:config>

//以下是com.szhtp.wiki.service.impl.WebAddMeetingServiceImpl.java,是一个webservice
@Service
public class WebAddMeetingServiceImpl implements WebAddMeetingService {
private SimpleHibernateTemplate meetingDao;
private SimpleHibernateTemplate personDao;

@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {

    meetingDao = new SimpleHibernateTemplate<T_ComPhone_Meeting, String>(
            sessionFactory, T_ComPhone_Meeting.class);
    personDao = new SimpleHibernateTemplate<T_ComPhone_Person, String>(
            sessionFactory, T_ComPhone_Person.class);
}
public String addMeeting(String alterdesc,String callername,String callerphone,String callmode,String calltime,
        String centrexid,String department,String hurrytype,String ternaldesc,String ternalday,String inputman,
        String meetaddress,String meetman,String meetname,String meettime,String remark) {                          T_ComPhone_Meeting tcm=new T_ComPhone_Meeting();  
                                tcm.setPersonname(meetmanN);
            meetingDao.saveService(tcm);

        try {List listtel = meetingDao.find(hql1);
        String hql2 = "select id from T_ComPhone_Member where id="+ allperson[i];
            T_ComPhone_Meeting tcm=new T_ComPhone_Meeting();                        personDao.saveService(person);
                    }
                }
            }
            // TODO Auto-generated method stub
  System.out.println("成功添加会议"+"id:"+tcm.getMeetid()+"会议名:"+meetname);
            return "success";

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("会议添加失败");
            return "error";

        }
    }
    return "error";

}

如果在meetingDao.saveService(tcm)之后发生异常,tcm还是会插入到数据库中,怎样才能使他错误回滚呢?
[b]问题补充:[/b]
是只要在方法中catch到运行时异常才回滚,还是要使用throw抛出运行时异常才能回滚?

  • 写回答

3条回答 默认 最新

  • 我不是逗B 2009-07-31 10:39
    关注

    问题补充:
    是只要在方法中catch到运行时异常才回滚,还是要使用throw抛出运行时异常才能回滚?

    如果你是在service这层作的事务,那些是要throw才能回滚。如果你把它catch了,拦截器是抓不到异常的。就不会回滚。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移
  • ¥15 如何用python处理excel的数据(极值标准化)
  • ¥15 三向应力状态求剪应力
  • ¥15 jupyter notebook如何添加libGL.so.1库
  • ¥20 easyPoi能否实现下拉多选或者复选框
  • ¥15 网桥在转发帧时,会变帧的源地址和目的地址吗?
  • ¥15 用Multisim设计汽车尾灯控制电路
  • ¥100 求用matlab求解上述微分方程的程序代码
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来