Hibernate Spring Boot JPA休眠父/子/孙

Hibernate Spring Boot JPA休眠父/子/孙,hibernate,spring-boot,Hibernate,Spring Boot,将新的孙子添加到父对象的子对象时,我要添加的对象似乎被集合中的新对象替换。相同的属性值,它可以正常保存,但Inew'd的原始对象不包含ID,已从集合中删除。即使在我通过设置this然后将孙子添加到集合中来添加子对象之后 我需要对象获取ID,以便映射并将其返回给调用方 @Entity @Table(name = "parents") public class Parent { @Id @GeneratedValue(strategy = GenerationType.SEQUENC

将新的孙子添加到父对象的子对象时,我要添加的对象似乎被集合中的新对象替换。相同的属性值,它可以正常保存,但I
new'd
的原始对象不包含ID,已从集合中删除。即使在我通过设置
this
然后将孙子添加到集合中来添加子对象之后

我需要对象获取ID,以便映射并将其返回给调用方

@Entity
@Table(name = "parents")
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @NotNull
    private long id;

    @NotNull
    private String name;


    @OneToMany(mappedBy = "parent", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<ChildA> childrenA;
}



@Entity
@Table(name = "children_a")
public class ChildA {
    @NotNull
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Id
    private long id;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "parent_id", nullable = false)
    private Parent parent;

    @OneToMany(mappedBy = "childA", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<ChildB> childrenB;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }


    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }

    public void addChildB(ChildB childb) {
        childb.setChildA(this);
        childrenB.add(childB);
    }

    public Set<ChildB> getChildrenB() {
        return childrenB;
    }

    public void setChildrenB(Set<ChildB> childrenB) {
        this.childrenB = childrenB;
    }
}


@Entity
@Table(name = "children_b")
public class ChildB implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id")
    private long id;


    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "child_a_id")
    private ChildA chiuldA;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public ChildA getChildA() {
        return childA;
    }

    public void setChildA(ChildA childA) {
        this.childA = childA;
    }

}
@实体
@表(name=“parents”)
公共类父类{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE)
@NotNull
私人长id;
@NotNull
私有字符串名称;
@OneToMany(mappedBy=“parent”,fetch=FetchType.EAGER,cascade=CascadeType.ALL)
私人设置的childrenA;
}
@实体
@表(name=“children\u a”)
公营儿童{
@NotNull
@GeneratedValue(策略=GenerationType.SEQUENCE)
@身份证
私人长id;
@manytone(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name=“parent\u id”,nullable=false)
私人家长;
@OneToMany(mappedBy=“childA”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人儿童b;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共父getParent(){
返回父母;
}
公共void setParent(父级){
this.parent=parent;
}
公共无效添加ChildB(ChildB ChildB){
childb.setChildA(本);
儿童b.添加(儿童b);
}
公共集getChildrenB(){
返回儿童b;
}
public void setChildrenB(Set childrenB){
this.childrenB=childrenB;
}
}
@实体
@表(name=“children_b”)
公共类ChildB实现了可序列化{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE)
@列(name=“id”)
私人长id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“child\u a\u id”)
私人ChildA chiuldA;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共儿童{
返回childA;
}
公共无效setChildA(ChildA ChildA){
this.childA=childA;
}
}

我遇到我的子实体被视为合并,因为父实体的save via JPA存储库是一个合并。这是按设计显示的

请共享一些代码…使用代码更新。要明确的是,当我通过ChildA的addChildB方法添加ChildB时,所有内容都会保存。但是我添加的对象没有得到新的ID,但是一个新的对象被添加到集合中,我的对象被替换。。。我找到的唯一解决方案是在将新实体添加到父实体之前保留它们。