Hibernate Spring Boot JPA休眠父/子/孙
将新的孙子添加到父对象的子对象时,我要添加的对象似乎被集合中的新对象替换。相同的属性值,它可以正常保存,但IHibernate 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
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,但是一个新的对象被添加到集合中,我的对象被替换。。。我找到的唯一解决方案是在将新实体添加到父实体之前保留它们。