多対多に関連する 2 つのマップされた型があります。
@Entity
@Table(name = "students")
public class Student{
...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "students2courses",
joinColumns = { @JoinColumn(
name = "student_id",
referencedColumnName = "_id") },
inverseJoinColumns = { @JoinColumn(
name = "course_id",
referencedColumnName = "_id") })
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
...
}
__
@Entity
@Table(name = "courses")
public class Course{
...
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "courses")
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
...
}
ただし、Course エンティティを更新/削除すると、students2courses テーブルでレコードが作成/削除されません。(学生エンティティの更新/削除は期待どおりに行われます)
抽象クラス HibObject を書きました
public abstract class HibObject {
public String getRemoveMTMQuery() {
return null;
}
}
Student と Course に継承されます。
DAO で、このコードを追加しました (delete() メソッド用):
String query = obj.getRemoveMTMQuery();
if (query != null) {
session.createSQLQuery(query).executeUpdate();
}
そして、コースの getRemoveMTMQuery() メソッドを上書きしました
@Override
@Transient
public String getRemoveMTMQuery() {
return "delete from students2courses where course_id = " + id + ";";
}
今は動作しますが、コードが悪いと思います。
この問題を解決する最善の方法はありますか?