各位大大,我是用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里面如何控制这个事务? 因为要先删除,再插入,先谢谢各位的关注
=========================================================================================
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里面如何控制这个事务? 因为要先删除,再插入,先谢谢各位的关注
sqlMap.startTransaction ();
......//这里循环调用dao
sqlMapper.commitTransaction();
flaginsert = proManagerService.insertLOG(pkslist[i]);
================================================================ProductManagerService.java public boolean insertLOG(String PRODUCT_ID){
boolean flag = pmDAO.insertLOG(PRODUCT_ID);
return flag;
}
=================================================================