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条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题