如何不插入两个以上的顺序nextval值?

时间:2014-06-12 10:46:00

标签: spring oracle insert sequence

我正在使用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;
    }

这是与序列相关的所有代码。

0 个答案:

没有答案