日期:2014-05-19  浏览次数:20574 次

spring声明式事务管理问题。
用MyEclipse反向工程生成spring式的DAO。一次调用不同dao的方法,是否可以事务管理。例如以下代码,
如果dao1删除不成功,则dao保存操作回滚。
Java code

ApplicationContext context = ScheduleListener.context;
WaitstationdefDAO dao = (WaitstationdefDAO) context.getBean("WaitstationdefDAO");
            dao.attachDirty(waitStation);
SellagentdefDAO dao1 = (SellagentdefDAO) context.getBean("SellagentdefDAO");
            Sellagentdef sellAgent = dao1.findById(id);
            if(sellAgent==null){

            }else{
                dao1.delete(sellAgent);
            }



------解决方案--------------------
你在哪个方法里面调两个dao,就在哪个方法上面声明事务。没问题的。
------解决方案--------------------
一般还会采取一个service层,用于对多个DAO的操作,事物就加在service层
------解决方案--------------------
只要把你想回滚的操作放在一个事务里就好了。

才不管你一个事务里有多少次db操作呢。。。
------解决方案--------------------
业务层做事务:方法前加@Transactional(rollbackFor = Exception.class)
前提DAO层做一个抛出异常
配置文件设置下