gpt4 book ai didi

java - 当我将元素从一个包移动到另一个包时出现 ObjectDeletedException

转载 作者:行者123 更新时间:2023-11-29 22:22:45 26 4
gpt4 key购买 nike

我有一个包含多个发票项目的发票对象。根据用户的选择,我需要将一些项目从一张发票移动到另一张发票。我正在使用 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);
}

关于java - 当我将元素从一个包移动到另一个包时出现 ObjectDeletedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com