我有两个班级的老师和课程。教师可以有多门课程。我想要使用除移除之外的所有级联。
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();
但这并不能挽救课程。好吧,也许mappdby的东西不是自动保存的,我应该写ession.save(课程),但如果它不自动做任何事情,为什么我要在Teacher中写级联类型?
1条答案
按热度按时间pinkon5k1#
您已指定双向关系,但仅向教师添加课程。您的课程实体没有教师,因此需要在保留教师之前添加。
在上面的关系中,你可以把老师想象成父母,把课程想象成孩子。在这种情况下,建议仅在父级和子级之间级联,因此删除课程实体中的级联。这样你总能知道瀑布往哪个方向走