Java 休眠级联以保存父级和子级
我有两节课。父母和孩子。详情如下:Java 休眠级联以保存父级和子级,java,hibernate,cascade,Java,Hibernate,Cascade,我有两节课。父母和孩子。详情如下: @Entity @Table(name = "parent") public class Parent implements Serializable { private String name; private List<Child> childs; @OneToMany(mappedBy="parent") @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELET
@Entity
@Table(name = "parent")
public class Parent implements Serializable {
private String name;
private List<Child> childs;
@OneToMany(mappedBy="parent")
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
public List<Child> getChilds() {
return childs;
}
@Id
@Column(name="parent_name")
public String getName() {
return name;
}
}
当我使用session.save(parent)时,它会在数据库中保存父项和子项,但
子表中的父标识符将保持空。那么问题出在哪里呢?在子实体上尝试以下操作:
@ManyToOne(targetEntity = Parent.class)
@JoinColumn(name = "parent", nullable = false)
如果我将OneToMany声明为单向,那么它工作得很好。您如何在父级中生成PK ID?我没有看到这一点code@OneToMany(mappedBy=“parent”)表示hibernate将自动在child中创建父id,但未更改任何内容。只是关于sql约束冲突的一个错误:org.hibernate.exception.ConstraintViolationException:列“parent”不能为null我认为hibernate在保存父项时不会刷新子项。您可以自己做,如下所示:public void addChild(Child-Child){this.childs.add(Child);Child.setParent(this);}当我提交事务时,hibernate将发送查询以填充这样的列(子表中的父列)。所以我认为这是因为我自己在child中声明了parent,而hibernate将不再有责任在提交时填充它。不管怎样,如果没有其他意见的话,我会尝试用我自己的意见来填补它。
@ManyToOne(targetEntity = Parent.class)
@JoinColumn(name = "parent", nullable = false)