各位大大,我是用STRUTS + IBATIS开发的,现在问题是:我一个ACTION,里面是一个FOR循环的DELETE,中途会再INSERT数据,想用事务控制,问题如何控制,下边是没有用事务控制的Action.java
=========================================================================================
        public ActionForward doDelete(ActionMapping mapping, ActionForm form,
            HttpServletRequest request,HttpServletResponse response) throws Exception {
                String pks = request.getParameter("hidden_pksId");
                boolean flagdel = false;
                boolean flaginsert = false;
try{
                    ProductManagerService proManagerService = new ProductManagerService();
    String[] pkslist = pks.split(",");
    for (int i=0; i<pkslist.length; i++){
        flagdel = proManagerService.deleteByPrimaryKey(pkslist[i]);
                        if (flagdel == false){
                          request.setAttribute("message", "删除物品错误");
  return mapping.findForward("toError");
                        }
                        flaginsert = proManagerService.insertLOG(pkslist[i]);
        if (flaginsert== false){
                          request.setAttribute("message", "插入日志错误");
  return mapping.findForward("toError");
                        
                        }
                    }
    return mapping.findForward("toQueryList");
}catch(Exception ex){
ex.printStackTrace();
request.setAttribute("message", "删除物品失败");
return mapping.findForward("toError");
}
}
=========================================================================================ProductManagerService.java
=========================================================================================
public class ProductManagerService {  private DaoManager daoManager;
  private ProductManagerDAO pmDAO;
  
  public boolean deleteByPrimaryKey(String PRODUCT_ID){
    boolean flag = pmDAO.deleteByPrimaryKey(PRODUCT_ID);
    return flag;
  }  public boolean insert(String PRODUCT_ID){
    boolean flag = pmDAO.insert(PRODUCT_ID);
    return flag;
  }}
=========================================================================================我应该在SERVICE里面如何控制这个事务? 因为要先删除,再插入,先谢谢各位的关注

解决方案 »

  1.   

    把pkslist作为参数传递到service中,这里才是处理业务逻辑的地方,事务也应该从这里开始然后在dao中写一个方法,返回当前的sqlMapper,然后在业务层
    sqlMap.startTransaction ();
    ......//这里循环调用dao
    sqlMapper.commitTransaction();
      

  2.   

    但是ACTION里面,要根据不同的FLAG,来判断到底是DEL错误还是INSERT错误,然后抛出给页面的,在SERVICE里面,我返回应该是如何实现这个办法呢?
      

  3.   

    还有,不好意思,打错了部分:ACTION部分
    flaginsert = proManagerService.insertLOG(pkslist[i]); 
    ================================================================ProductManagerService.java public boolean insertLOG(String PRODUCT_ID){ 
        boolean flag = pmDAO.insertLOG(PRODUCT_ID); 
        return flag; 
      } 

    =================================================================