Java 休眠多对多关系

Java 休眠多对多关系,java,hibernate,many-to-many,Java,Hibernate,Many To Many,我有两种映射类型,它们相互关联 @Entity @Table(name = "students") public class Student{ ... @ManyToMany(fetch = FetchType.EAGER) @JoinTable( name = "students2courses", joinColumns = { @JoinColumn( name = "student_id", referencedColumnName =

我有两种映射类型,它们相互关联

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

...
}
这是由学生和课程继承的

在DAO中,我添加了以下代码(用于delete()方法):

当然,我还考虑了getRemoveMTMQuery()方法

@Override
@Transient
public String getRemoveMTMQuery() {
    return "delete from students2courses where course_id = " + id + ";";
}
现在它工作了,但我认为这是一个糟糕的代码


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

非常感谢可能的重复。但这并不完全相同。我阅读并理解它为什么不起作用。但我也想知道,如何实现它除了冬眠。我的解决方案很好,但我认为这是一个常见的问题,应该有更好的解决方案。你说的“除了Hibernate”是什么意思?如果您始终维护关联的双方(当然,尤其是所有者方),一切都将按预期运行。JB Nizet,在您的链接中,我读到“只有一方可以成为所有者。没有办法使其双向运行。”。所以我的意思是,从另一方面来说,我必须“手动”(例如通过纯SQL查询)删除关系表(students2courses)中的记录,我想知道是否有任何标准方法可以解决这个问题。
public abstract class HibObject {
    public String getRemoveMTMQuery() {
        return null;
    }
}
String query = obj.getRemoveMTMQuery();
if (query != null) {
    session.createSQLQuery(query).executeUpdate();
}
@Override
@Transient
public String getRemoveMTMQuery() {
    return "delete from students2courses where course_id = " + id + ";";
}