Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 如何使JPA merge为OneToMany关系插入新的子对象_Java_Hibernate_Jpa_One To Many_Many To One - Fatal编程技术网

Java 如何使JPA merge为OneToMany关系插入新的子对象

Java 如何使JPA merge为OneToMany关系插入新的子对象,java,hibernate,jpa,one-to-many,many-to-one,Java,Hibernate,Jpa,One To Many,Many To One,当有新的子对象时,我很难使合并向下级联。 我有一个父对象(城市)和一组子对象 @OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, fetch=FetchType.LAZY ) public Set<Street> getStreets() { return streets; } 我每天都在运行一个例行程序,将信息转储到数据库中。一切都很好,直到JPA跑进一条新的街道。当它给我一个EntityNotFo

当有新的子对象时,我很难使合并向下级联。 我有一个父对象(城市)和一组子对象

@OneToMany(mappedBy = "parent", cascade = { CascadeType.ALL }, fetch=FetchType.LAZY )
public Set<Street> getStreets() {
    return streets;
}
我每天都在运行一个例行程序,将信息转储到数据库中。一切都很好,直到JPA跑进一条新的街道。当它给我一个EntityNotFoundException时。我假设这意味着数据库中没有具有新ID的street。据我所知,这是因为子对象是事务的实际所有者,但如果遇到此“EntityNotFound”异常,我需要它来持久化新对象

我没有使用自动生成的主键,它是数据集中已经存在的一个键。目前,我可以访问一个在父对象上使用em.merge()的微服务

我看到有一个选项可以删除不再存在的对象(删除);有没有办法添加新的


谢谢

我不知道情况是否如此,但对我来说,只有当我将hibernate的注释放在变量属性本身之上,而不是放在getter方法之上时,才有效。

对我有效的方法是先“手动”保存街道,然后保存城市。

这取决于您试图保存或合并集合和父对象的方式。由于有双向映射,所以需要有双向关联,如
parent.getChildren().add(newChild)和newChild.setParent(父级)`目前我只是在父对象上调用em.merge()。是否有办法让实体经理自动处理此问题?就像孤儿一样?这个链接可能对你有点帮助。抱歉误解,
merge()
进行插入(如果需要)。在您的情况下,
@Id
是自动生成还是分配的?如果未指定,则它将假定对象在那里并尝试更新@RP-我看到的行为是merge()没有根据需要插入。它不会插入,而是抛出EntityNotFoundException。
@Id
从传入的数据集填充,并在合并前分配。你是说如果
@Id
是自动生成的,它会尝试更新吗?如果它不知道要更新的记录的Id,它会尝试更新什么?
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="City", nullable=false)
public City getParentCity(){
    return parentCity;
}