我正在調試基於Java的Web應用程序。還有就是多個記錄插入表從我們的生產 環境報告的問題,但其他記錄無效爲什麼Oracle/Java在一次執行中創建多個記錄?
生產問題的結果:
頭表
HDR_NO HDR_COL1 HDR_COL1 DOCUMENT_DATE
HDR44 2014年6月6日14時22
HDR45 2014年6月6日14:24 - 無效數據
HDR46 2014年6月6日14:24 - 無效數據
個細節表
DTL_NO HDR_NO DTL_COL1 DTL_COL1
DTL76 HDR44 SR1439 4337
DTL77 HDR45 SR1439 4337 - 無效數據
DTL78 HDR46 SR1439 個 4337 - 無效的數據
生產問題的結果:
(預期的結果:爲每個表只能有一個記錄)。
我試圖通過發送三個連續的httpservletrequest在我的本地環境中複製此問題。
我們的驗證過濾了兩個請求,因爲它會嘗試插入三個具有與id相同的HDR_NO的
標頭實例。
在我的測試中爲每個表插入一條記錄。我現在的問題是,是什麼導致了這個錯誤?
我的代碼看起來像下面的代碼。請幫忙。
由於提前,
public class MyController extends SimpleFormController{
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,Object
private MyService myService
command, BindException errors){
BeanParam bean = buildBeanParam(request);
myService.doTransaction(bean);
}
}
public class MyService{
public void doTransaction(BeanParam bean){
try{
List Item items = getItems(bean);// query with one result
Header header = createHeader();//mysterious bug occur
populateDetails(header, items);//mysterious bug occur
} catch (GenerateIdException e) {
e.printStackTrace();
}
}
public Header createHeader(){
Header header = new Header();
// generates a number with common prefix
header.setHeaderNo(headerNumberGenerator());
header.setDocumentDate(new Date());
header.setHdrcol1("String 1");
header.setHdrcol2("String 2");
return headerDao.save(header);
}
public void populateDetails(Header header, List;Item; items){
for(Item item: items){
//items.size() == 1, so one record in Detail Table is expected
Detail detail = new Detail();
// generates a number with common prefix
detail.setDetailNo(detailNumberGenerator());
detail.setDocumentDate(new Date());
detail.setDtlcol1(item.getField1());
detail.setDtlcol2(item.getField2());
detail.setHeader(header);
detailDao.save(detail);
}
}
}
public class Header{
@Id
@Column(name = "HDR_NO", length = 20)
private String headerNo;
@Temporal(TemporalType.DATE)
@Column(name = "DOCUMENT_DATE")
private Date documentDate;
@Column(name = "HDR_COL1")
private String hdrcol1;
@Column(name = "HDR_COL2")
private String hdrcol2;
@OneToMany(mappedBy = "header")
@Cascade(value = { CascadeType.PERSIST, CascadeType.MERGE })
private List Details details;
//Getters and Setters
}
public class Details{
@Id
@Column(name = "DTL_NO")
private String detailNo;
@ManyToOne
@JoinColumn(name = "HDR_NO", referencedColumnName = "HDR_NO")
private Header header;
@Column(name = "DTL_COL1")
private String dtlcol1;
@Column(name = "DTL_COL2")
private String dtlcol2;
//Getters and Setters
}
public class Item{
@Column(name = "FIELD1")
private field1;
@Column(name = "FIELD2")
private field2;
//Getters and Setters
}
是的......我不能在我的本地環境中複製這個... – dolf
有沒有可能做遠程調試? – user75ponic
由我們的用戶提供的步驟,我認爲這個問題不可能發生。不穩定的數據庫連接可能導致此錯誤嗎? – dolf