我正在使用spring框架和oracle DB作为Web解决方案系统。
问题是当我调用与oracle序列相关的网页时, 有时在DB表上插入两行以上。
这些行没有重复值,但序列中的值增加。 我也检查了java代码, 但我没有使用循环或句子或两次插入句子。
这经常发生吗? 我该如何解决这个问题?
我是否必须添加用于检查值的代码或在表上创建oracle触发器?
这是代码。
public void insertDefaultLParameter(HttpServletRequest request, String workflowId) throws Exception{
String newLParaId = mapper.getNewLParaId();
HashMap<String, String> condition = new HashMap<String, String>();
condition.put("newLParaId", newLParaId);
condition.put("paraValue", "2013-05");
condition.put("workflowId", workflowId);
mapper.insertLParameter(condition);
mapper.insertLParameterMapping(condition);
}
“getNewLParaId()”调用序列“MT_L_PARA_MAPPING_SEQ”,如下面的sql。
SELECT 'LPARA' || LPAD(MT_L_PARA_MAPPING_SEQ.nextval,10,0) FROM DUAL
获取值后,通过“insertLParameter”和“insertLParameterMapping”映射id将值插入到两个表中。
以下是调用“insertDefaultLParameter”类的代码。
请参阅代码底部。
你可以找到“rfmService.insertDefaultLParameter(request,praWfId);”。
@RequestMapping(value="/insertWorkflowInfo", method=RequestMethod.POST, headers="Accept=application/json")
public ModelAndView insertWorkflowDetail(Locale locae, Model model, HttpServletRequest request) throws Exception{
HttpSession session = request.getSession(false);
User user = (User)session.getAttribute("user");
String userId = user.getUserId();
String workflowNm = "";
String alsPpsCd = "";
String workflowDesc = "";
String pid = "";
String plevel = "";
if(request.getParameter("workflowNm") != null || !request.getParameter("workflowNm").equals("")) workflowNm = request.getParameter("workflowNm");
if(request.getParameter("alsPpsCd") != null || !request.getParameter("alsPpsCd").equals("")) alsPpsCd = request.getParameter("alsPpsCd");
if(request.getParameter("workflowDesc") != null || !request.getParameter("workflowDesc").equals("")) workflowDesc = request.getParameter("workflowDesc");
if(request.getParameter("pid") != null || !request.getParameter("pid").equals("")) pid = request.getParameter("pid");
if(request.getParameter("plevel") != null || !request.getParameter("plevel").equals("")) plevel = request.getParameter("plevel");
//0.
//HashMap<String,String> treeMgtInfo = new HashMap<String,String>();
//treeMgtInfo.put("treeId",pid);
//
HashMap<String,String> input = new HashMap<String,String>();
//2.
String praWfId = wfService.selectPraWfid();
input.put("praWfId", praWfId);
input.put("wfNm",workflowNm);
input.put("wfDesc", SecurityUtil.removeXSS(workflowDesc));
input.put("alsPpsCd",alsPpsCd);
input.put("usrId",userId);
input.put("rgUsrId",userId);
// 1.
wfService.insertWorkflowDetail(input);
input.put("treeNm",workflowNm);
//
int treeLevCd = new Integer(plevel) +1 ;
input.put("treeLevCd",""+treeLevCd);
input.put("treeBjCd",Constant.TREE_BJ_CD_WORKFLOW);
input.put("treeCd",Constant.TREE_CD_WORKFLOW);
//
input.put("treeLrkRufId",praWfId);
input.put("upTreeId",pid);
//
int sceXrsSeqVl = treeService.selectSceXrsSeqId(input);
input.put("sceXrsSeqVl",""+sceXrsSeqVl);
String treeId = treeService.selectTreeIdInfo();
input.put("treeId",treeId);
// 2.
rfmService.insertDefaultLParameter(request, praWfId);
// 3.
treeService.insertTreeMgtInfoWithId(input);
ModelAndView modelAndView=new ModelAndView("defaultViews");
modelAndView.addObject("treeId",treeId);
modelAndView.addObject("praWfId",praWfId);
return modelAndView;
}
这是与序列相关的所有代码。