講師とコースという2つのクラスがあります。私の講師クラスには、示されているように変数のコースオブジェクトのリストがあります
@OneToMany(mappedBy = "lecturer")
@NotFound(action = NotFoundAction.IGNORE)
private List<Course> courseList = new ArrayList<Course>();
私のコースクラスでは、以下のように変数としてLecturerオブジェクトがあります。
@ManyToOne
@JoinTable(name = "course_lecturer", joinColumns = @JoinColumn(name = "course_id"), inverseJoinColumns = @JoinColumn(name = "lecturer_id"))
private Lecturer lecturer;
これで、Lecturerのjsonオブジェクトを次のように返すSpringControllerメソッドができました。
@RequestMapping(value = "/getlecturerbyid", method = RequestMethod.POST)
public @ResponseBody
Object getLecturer(@ModelAttribute(value = "id") Lecturer lecturer) {
Map<String, Object> response = new HashMap<String, Object>();
response.put("message", "succeess");
response.put("lecturer", lecturer);
return response;
}
問題は、遅延初期化例外をスローすることです。したがって、LecturerクラスとCourseクラスの両方の変数のフェッチタイプをeagerに設定しました。ここで問題となるのは、オブジェクトを熱心にフェッチしようとすることです(どちらかのフェッチの設定を解除すると、同じ例外が発生します)。
一方、いずれかのクラスの変数を削除すると、Hibernateは別のクラスとの関係があることを認識しません。例:Lecturerからコースリストを削除し、Lecturerオブジェクトの1つを削除した場合、hibernateは削除されたLecturerオブジェクトに関連するコースオブジェクトを削除しません。したがって、Hibernateクエリを記述し、コードから手動で削除する必要があります。
この問題を克服する方法について教えてください。