【发布时间】:2018-06-17 03:16:27
【问题描述】:
我在休眠中有 OneToMany 关系,如下所示:
class Container {
@OneToMany( cascade = {CascadeType.ALL}, mappedBy = "container", orphanRemoval = true)
List<Item> items;
}
简化的场景是我从数据库中加载一个Container 对象(容器)并尝试将Item 添加到container.items,如下所示:
Container container = entityManager.find(Container.class,id);
container.getItems().add(new Item(container));
entityManager.merge(container);
一切顺利。但就我而言,我想遍历项目并检查一些东西,但是当我像这样调用container.getItems().iterator 并保存container 时:
Container container = entityManager.find(Container.class,id);
container.getItems().add(new Item(container));
container.getItems().iterator(); // here is the change
entityManager.merge(container); // here is where exception occured
我收到以下错误
org.hibernate.TransientObjectException: 对象引用了一个未保存的瞬态实例 - 在查询刷新之前保存瞬态实例:mypackage.items
我不知道为什么会发生这个异常。
【问题讨论】:
-
你可以试试用 listIterator 代替 iterator 吗?
-
@GarimaGupta 不,同样的错误。
-
如果您在添加到列表之前
persist()新项目会怎样? -
@yegodm 可以,但是
iterator()出了什么问题,我想用它来删除项目中的重复项。 -
你的 Hibernate 版本是多少?我无法用 5.2.12 重现该案例。
标签: java hibernate one-to-many hibernate-cascade