【发布时间】:2020-11-05 13:02:44
【问题描述】:
请看以下代码 sn-ps 来自 2 个类(实体)Student 和 Course
public class Student {
...
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "course_student",
joinColumns = @JoinColumn(name="student_id"),
inverseJoinColumns = @JoinColumn(name="course_id")
)
private List<Course> courses;
...
}
public class Course {
...
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "course_student",
joinColumns = @JoinColumn(name="course_id"),
inverseJoinColumns = @JoinColumn(name="student_id")
)
private List<Student> students;
...
}
驱动代码如下
try {
session.beginTransaction();
Course course = new Course("Ukulele master class");
Student student1 = new Student("Jishnu","M V","jishnumv@gmail.com");
Student student2 = new Student("Praveen","M V","praveenmv@gmail.com");
course.add(student1);
course.add(student2);
session.save(course);
session.getTransaction().commit();
}
当我运行此代码时,出现以下异常
Exception in thread "main" java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.jithin.entity.Student
所以我的怀疑是。 虽然我们在 Course 类中提到了 CascadeType.ALL,但保留课程并不会保留关联的学生。那么为什么级联在多对多的情况下不起作用?
nb:当我使用session.save() 保存两个学生对象时,在保存课程对象之前。也不例外。
【问题讨论】:
-
你说的Nb是什么意思:当我也救了学生时,代码完美运行。?
-
我的意思是,在保存课程对象之前,我使用 session.save() 保存了两个学生对象。也不例外。
-
@jithinMV 你在
Course里面有courses? -
@SternK 对不起,代码编辑不正确。现在已更新。感谢您指出这一点。
标签: java hibernate orm many-to-many cascade