我在hibernate中有OneToMany Relation,如下所示:
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:object引用未保存的瞬态实例 - 在查询刷新之前保存瞬态实例:mypackage.items
我不知道为什么会发生这种异常。
答案 0 :(得分:2)
您的item对象需要引用其父对象:
Container container = entityManager.find(Container.class,id);
Item item = new Item();
item.setContainer(container); //needed
container.getItems().add(item);