1

我在休眠中有 OneToMany 关系,如下所示:

class Container {
    @OneToMany( cascade = {CascadeType.ALL}, mappedBy = "container", orphanRemoval = true)
    List<Item> items;
}

简化的场景是我从数据库中加载一个对象Container(容器)并尝试像这样添加一个:Itemcontainer.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

我不知道为什么会发生此异常。

4

1 回答 1

2

您的项目对象需要引用其父项:

Container container = entityManager.find(Container.class,id);
Item item = new Item();
item.setContainer(container); //needed
container.getItems().add(item);
于 2018-01-08T14:12:16.090 回答