我尝试使用Annotations进行多对多Hibernate映射,并使用vaannila中给出的示例。
Set<Course> courses = new HashSet<Course>();
courses.add(new Course("Maths"));
courses.add(new Course("Computer Science"));
Student student1 = new Student("Eswar", courses);
Student student2 = new Student("Joe", courses);
session.save(student1);
session.save(student2);
这件事情很好。但是,如果我稍后尝试将其他课程添加到现有学生中,
Set<Course> courses = new HashSet<Course>();
courses.add(new Course("Science"));
Student student = new Student("Eswar", courses);
session.save(student);
它在表格中再次复制了学生Eswar。
+------------+--------------+
| STUDENT_ID | STUDENT_NAME |
+------------+--------------+
| 1 | Eswar |
| 2 | Joe |
| 3 | Eswar |
+------------+--------------+
我不能将课程添加到现有的Eswar中吗? 我非常感谢你对这个问题的帮助。
答案 0 :(得分:0)
首先需要从数据库中获取Student,然后向该对象添加课程,然后保存获取的对象。
这样,您正在创建一个新的Student对象,这个新的student对象在“ID”实例变量中有一个null。在我看来,Hibernate必须将此实例变量映射到主键以进行查找,如果找到id,则更新记录,否则插入新记录。
是的,如果你需要为现有学生添加课程,你可能想先从获取的学生对象中设置,然后在该组中添加一个课程,然后保存......否则新的哈希集将仅包含新课程,之前的记录将被覆盖。