1

我在应用程序的前端使用 JSF,在后端使用休眠。问题是有一种方法可以将记录保存在数据库(Oracle 11g)中,它从用户界面“单击时”调用,但似乎一次单击就运行了两次而不是一次。虽然不是每次。

我在这里分享该方法的代码:

MedOpd med = new MedOpd();

med.setStaff(staff);
med.setNotes(this.notes);   
med.setOpdDate(ICMSUtils.getCurrentDateSQL());
med.setMedPatient(medPat);

HashMap dataMap = new HashMap();
HashMap dataMap2 = new HashMap();
dataMap.put(APP_OBJECT.MED, med);

dataMap2 = handleDoctorProcessorLocal.processMedicineProcessor(
                    dataMap, APP_ACTIONS.SAVE);

String result = dataMap2.get(APP_VARIABLES.RESULT).toString();      
if(result.equals(RESULTS.SUCCESS))
{
mo = (MedOpd) dataMap2.get(APP_OBJECT.MEDOPD);

for (int i = 0; i < opdMedicineList.size(); i++) 
    {
    MedMedicines mom2 = (MedMedicines) opdMedicineList.get(i);
    mom2.setMedOpd(mo);

    mom2.setMiName(mom2.getMedItem().getMiName());
    mom2.setMiCode(mom2.getMedItem().getMiCode());
    mom2.setIssued("P");

    dataMap.put(APP_OBJECT.MEDOPDMEDICINE, mom2);
    dataMap = handleDoctorProcessorLocal.
                          processOpdDoctorProcessor(
                                 dataMap, APP_ACTIONS.SAVE+"MEDMEDICINE");
    }

}   

如您所见,它是我保存在数据库中的主/详细记录,代码运行良好,但有时,该方法单击即可保存两条相同的记录,并且它们的详细信息也将被复制。我还想在这里分享为同一记录生成的数据库 ID:

主表 ID:1010
详细表记录:
1. DET_ID=2010, MAS_ID=1010
2. DET_ID=2012, MAS_ID=1010
2. DET_ID=2015, MAS_ID=1010

主表 ID : 1011
详细表记录:
1. DET_ID=2011, MAS_ID=1011
2. DET_ID=2013, MAS_ID=1011
2. DET_ID=2014, MAS_ID=1011

请注意,我没有在我的应用程序中使用线程,但是这个页面一次被多个用户使用,这个类中根本没有静态字段或方法..

这是jsp代码:

<h:panelGrid columns="2" style="width:20%; margin:10px 50px 10px 80px;">

<ajax:commandButton id="save1" value="Next" action="#{opdManager.saveMedicine2}" reRender="patientPanel" />

</h:panelGrid>

整个jsp页面非常复杂,所以我只分享调用该方法的Button代码。“saveMedicine2”方法在整个jsp中只使用一次。

4

0 回答 0