簡體   English   中英

當我將物品從一個袋子搬到另一個袋子時出現ObjectDeletedException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM