我有两个班,老师和课程。老师可以有多种课程。我想使用除Remove之外的所有级联。
public Teacher {
@OneToMany(mappedBy = "teacher",cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.DETACH,CascadeType.MERGE})
private List<Course> courses;
}
public class Course {
....
@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH,CascadeType.REFRESH})
@JoinColumn(name="teacher_id")
private Teacher teacher;
}
然后创建对象以将它们保存在另一个主类中。
List<Course> l = new ArrayList<>();
l.add(course1);
l.add(course2);
teacher.setCourses(l);
SessionFactory sf = new Configuration().configure().addAnnotatedClass(Teacher.class).
addAnnotatedClass(Course.class).buildSessionFactory();
Session session = sf.getCurrentSession();
try {
session.beginTransaction();
session.save(teacher);
session.getTransaction().commit();
但这并不能节省课程。好吧,也许mappedBy的东西不是自动保存的,我应该写session.save(当然(,但如果它没有自动执行任何操作,我为什么要在Teacher中写级联类型?
您指定了一个双向关系,但只是在向教师添加课程。你的课程实体没有老师,所以在坚持老师之前需要添加。
List<Course> l = new ArrayList<>();
l.add(course1);
l.add(course2);
teacher.setCourses(l);
course1.setTeacher(teacher)
course2.setTeacher(teacher)
在上面的关系中,你可以把老师看作父母,把课程看作孩子。在这种情况下,只建议从父级级联到子级,因此请在课程实体中删除级联。这样你就永远知道级联的方向
public class Course {
....
@ManyToOne
@JoinColumn(name="teacher_id")
private Teacher teacher;
}