gpt4 book ai didi

java - 如果我们在保存之前调用 iterator(),Hibernate TransientObjectException on OneToMany with CascadeType.ALL

转载 作者:行者123 更新时间:2023-11-30 02:16:46 25 4
gpt4 key购买 nike

我在 hibernate 状态下有一对多关系,如下所示:

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 references an unsaved transient instance - save the transient instance beforeQuery flushing: mypackage.items

我不知道为什么会出现这个异常。

最佳答案

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

Container container = entityManager.find(Container.class,id);
Item item = new Item();
item.setContainer(container); //needed
container.getItems().add(item);

关于java - 如果我们在保存之前调用 iterator(),Hibernate TransientObjectException on OneToMany with CascadeType.ALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48145290/

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