【发布时间】:2012-11-21 19:08:42
【问题描述】:
这是我的课程
class Teacher {
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
Set<Students> getStudents()
}
问题是,
会话 1
第一步:获取Teacher id = 1,在同一个会话中调用session.initializeCollection(teacher.children)初始化学生
第 2 步:添加一个新学生 (id =1)
第 3 步:合并教师实例以插入添加的学生
第 2 节:
第 1 步:在会话 1 的第 2 步之前获取教师 id = 1。使用 intializeCollection(teacher.children) 初始化孩子
第 2 步:执行合并以在会话 1 中完成任何更改(在第 3 步之后)
//在这一步,hibernate id对Teacher进行更新并删除Student 1
第 3 步:添加另一个 Student (id = 2) 并合并教师以保存 Student (id = 2)
我假设当在第 2 步中完成合并 2 时,它会导致集合在 Session 1 中完成的更改被刷新,即将新对象从 Session 1 添加到 Session 2,children 集合。
有人可以解释为什么会发生这种情况以及应该如何处理该对象,以便在第 2 次会话中,学生集合会随着表的任何更改而刷新,例如,将任何子对象添加到表中?
也只是说明一下,在步骤 1 之后,教师对象是一个分离的实例,因为该对象被传递到基于 Web 的视图层并在步骤 2 中修改并在步骤 3 中重新附加
【问题讨论】: