插入Child对象时,父对象插入两次

时间:2013-08-03 06:46:59

标签: spring hibernate jpa annotations

在我的Hibernate应用程序中,我有时间表(父)classtable(child)是他们的。

我的第一个操作是插入时间表并使用此时间表插入许多classtable。喜欢onetomany Relation。

但是我正面临着这个问题:插入第一个时间表并插入了classtable,并再次提供时间表和classtable ..........等等......

但我的目的只是一个时间表,而且许多是可以说的。

在时间表中听到我的代码

@OneToMany(mappedBy = "timetable",cascade={CascadeType.ALL})
    private Set<ClassTableVO> classtable;

和ClassTable

@ManyToOne(cascade={CascadeType.ALL})
    @JoinColumn(name = "COURSE_TABLE_ID")
    private TimetableVO timetable;

如果我们移除(cascade={CascadeType.ALL}),则会提供object references an unsaved transient instance等异常  请帮帮我..

Edit:

在我的Hibernate中,我使用的是JPA EntityManager类

userDAO.createEvent(timetableVO);//this loop only one time executed 
------
-----
for(---){
userDAO.createClassTable(classTable);
}

以上方法在两种方法中都有两行代码。

entityManager.merge(classTable);//
entityManager.flush();

1 个答案:

答案 0 :(得分:0)

执行TimeTableVO.addClassTable(ClassTableVO ct)时,请记得设置ClassTableVO.timetable

public void TimeTableVO.addClassTable(ClassTableVO ct){
  if(classtable.add(ct)){
    ct.setTimetable(this);
  }
}

所以链接是正确设置的,Hibernate知道如何在保存时正确级联对象