これが私のクラスです
class Teacher {
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
Set<Students> getStudents()
}
問題は、
セッション1
ステップ1:教師ID = 1を取得し、同じセッションでsession.intitializeCollection(teacher.children)を呼び出して生徒を初期化します
ステップ2:新しい学生を追加します(id = 1)
ステップ3:教師インスタンスをマージして、追加された生徒を挿入します
セッション2:
ステップ1:セッション1のステップ2の前にTeacher id = 1を取得します。intializeCollection(teacher.children)を使用して子を初期化します
ステップ2:マージを実行して、セッション1で行われた変更を取得します(ステップ3の後)
//このステップで、Hibernate IDがTeacherを更新し、Student1を削除します
ステップ3:別の生徒を追加し(id = 2)、教師をマージして生徒を保存します(id = 2)
ステップ2でマージ2が実行されると、セッション1で行われた変更でコレクションが更新される、つまり、セッション1からセッション2の子コレクションに新しいオブジェクトが追加されると想定していました。
誰かがこれが起こっている理由と、セッション2で生徒のコレクションがテーブルへの変更で更新されるように、つまり子オブジェクトがテーブルに追加されるようにオブジェクトを処理する方法を説明できますか?
また、ステップ1の後、オブジェクトはWebベースのビューレイヤーに渡され、ステップ2で変更され、ステップ3で再アタッチされるため、教師オブジェクトはデタッチされたインスタンスになります。