[英]ObjectDeletedException when i move items from one bag to another
我有一個包含多個發票項目的發票對象。 根據用戶的選擇,我需要將某些項目從一張發票移到另一張。 我正在使用MySql和Hibernate。
發票項目定義為延遲加載,如下所示:
在Java中,請執行以下操作:
Invoice newInvoice = new Invoice();
iter = invoice.getPurchasableItems().iterator();
while(iter.hasNext()){ // item that is not purchased into new invoice
InvoiceItem item = iter.next();
invoice.getItems().remove(item);
newInvoice.addItem(item);
}
然后我保存了兩個發票:
iter = newInvoice.getItems().iterator();
while(iter.hasNext()){
InvoiceItem item = iter.next();
session.saveOrUpdate(item);
}
iter = invoice.getItems().iterator();
while(iter.hasNext()){
InvoiceItem item = iter.next();
session.saveOrUpdate(item);
}
session.commit();
我得到ObjectDeletedException。 我相信除了將發票從一個發票移到另一個發票之外,我沒有其他提及發票的內容。 我這樣做是因為我想確保我不會在發票項目表中得到很多未使用的ID。
您可以提出解決此問題的方法嗎?
也許這與您的問題無關,但您的第一時間可能正在修改要迭代的集合。 您可能應該使用迭代器中的remove()方法。
然后將InvoiceItem從一個包更改為另一個包還不夠,您還需要更新invoiceItem,我不知道您的InvoiceItem中是否在ManyToOne上有ManyToMany,但是我認為您必須同時設置關系的兩側。
Invoice newInvoice = new Invoice();
iter = invoice.getPurchasableItems().iterator();
while(iter.hasNext()){ // item that is not purchased into new invoice
InvoiceItem item = iter.next();
iter.remove();
item.setInvoice(newInvoice);
newInvoice.addItem(item);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.