1

我有两种映射类型,多对多相关。

@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 + ";";
}

现在它可以工作了,但我认为这是一个糟糕的代码。

有没有解决这个问题的最佳方法?

4

0 回答 0