【问题标题】:ObjectDeletedException when i move items from one bag to another当我将物品从一个袋子移到另一个袋子时出现 ObjectDeletedException
【发布时间】:2015-08-14 01:43:59
【问题描述】:

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

您能提出解决此问题的方法吗?

【问题讨论】:

标签: java mysql hibernate


【解决方案1】:

也许它与您的问题无关,但您的第一次可能是修改您正在迭代的集合。您可能应该使用迭代器中的 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);
}

【讨论】:

  • 谢谢..我从发票中删除项目而不是迭代器.. invoice.getItems().remove(item) .... 关系是一对多而不是双向定向的。和 cascade="all,delete-orphan" ... 谢谢
猜你喜欢
  • 2019-12-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多