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