我有两种映射类型,多对多相关。
@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;
}
...
}
但是,如果我更新/删除课程实体,则不会在表 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();
}
我为 Course 重写了方法 getRemoveMTMQuery()
@Override
@Transient
public String getRemoveMTMQuery() {
return "delete from students2courses where course_id = " + id + ";";
}
现在它可以工作了,但我认为这是一个糟糕的代码。
有没有解决这个问题的最佳方法?