Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CascadeType.ALL在OneToMany上休眠TransientObject异常,如果在保存前调用迭代器()_Java_Hibernate_One To Many_Hibernate Cascade - Fatal编程技术网

Java 使用CascadeType.ALL在OneToMany上休眠TransientObject异常,如果在保存前调用迭代器()

Java 使用CascadeType.ALL在OneToMany上休眠TransientObject异常,如果在保存前调用迭代器(),java,hibernate,one-to-many,hibernate-cascade,Java,Hibernate,One To Many,Hibernate Cascade,我在hibernate中有一对夫妻关系,如下所示: class Container { @OneToMany( cascade = {CascadeType.ALL}, mappedBy = "container", orphanRemoval = true) List<Item> items; } 一切都很好。但是在我的例子中,我想迭代项目并检查一些东西,但是当我调用container.getItems().iterator并像这样保存container时: Co

我在hibernate中有一对夫妻关系,如下所示:

class Container {
    @OneToMany( cascade = {CascadeType.ALL}, mappedBy = "container", orphanRemoval = true)
    List<Item> items;
}
一切都很好。但是在我的例子中,我想迭代项目并检查一些东西,但是当我调用
container.getItems().iterator
并像这样保存
container
时:

Container container = entityManager.find(Container.class,id);
container.getItems().add(new Item(container));
entityManager.merge(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.transientObject异常:对象引用未保存的临时实例-在查询刷新之前保存临时实例:mypackage.items


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

您的item对象需要有对其父对象的引用:

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

你能试着用listIterator代替iterator吗?@GarimaGupta不,同样的错误。如果在添加到列表之前将新项目
persist()
怎么办?@yegodm它可以工作,但是
iterator()
有什么问题,我想用它来删除项目中的重复项。你的Hibernate版本是什么?我不能用5.2.12重现这个例子。不幸的是,我做到了。但是因为我简化了我的代码,我删除了它。有趣的是,只有当我调用
iterator()
时,问题才会出现。否则,一切正常。当尝试使用具有分离状态的数据模型的域属性时,会发生此异常。您需要使用属性显式获取域对象,并使用session.load(yourTransientObject)进一步使用此获取的对象