有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有级联类型的OneToMany上的java Hibernate TransientObject异常。如果我们在保存之前调用迭代器()就可以了

我在冬眠状态下有一段恋情,如下所示:

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

简化的场景是,我从数据库中加载一个Container对象(容器),并尝试向container.items添加一个Item,如下所示:

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

我不知道为什么会发生这种异常


共 (1) 个答案

  1. # 1 楼答案

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

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