【发布时间】:2014-08-19 18:11:23
【问题描述】:
我在 oneToMany 和 ManyToOne 中有以下两个类
父类:
@Entity
class ParentBean{
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long id_parent;
@Column( name = "NAME" )
private String name;
@OneToMany( mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER )
private List<ChildBean> revisionList;
}
子类:
@Entity
class ChildBean {
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Long id_child;
private String name;
@ManyToOne( fetch = FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn( name = "ID_PARENT", nullable = false )
private ParentBean parent;
}
我使用以下代码来创建 bean:
ParentBean parent = new ParentBean();
parent.setName( "test parent");
List<ChildBean> revList = new ArrayList<>();
ChildBean child = new ChildBean();
child.setName( "test child" );
revList.add ( child );
parent.setRevisionList( revList );
然后我用这个将bean结构写入数据库...
@PersistenceContext
private EntityManager em;
@Override
public void addDrawing( FtDrawing drawingIn )
{
em.persist( drawingIn );
em.flush();
}
父 bean 已写入,但出现以下错误且子 bean 从未写入
原因: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列“ID_PARENT”不能为空
我在网上四处查看并遵循了几个不同的示例,它们似乎都与我正在做的相同...我的数据库是 MySQL,我必须将两个主键设置为 auto_increment。最后一件事。我没有在子表中指定一个外键来关联到父表......这是必需的吗?我使用的是旧版本的休眠,没有必要......
提前感谢您的帮助
【问题讨论】:
-
在持久化
ChildBean之前,必须设置其parent字段。问题是,当您将子项添加到父项列表时,未设置子项的父字段。在持久化之前设置它(级联持久化父级时)。
标签: java jpa eclipselink one-to-many many-to-one