我尝试使用注释进行 Hibernate 映射多对多,并使用 vaannila 中给出的示例。
http://www.vaannila.com/hibernate/hibernate-example/hibernate-mapping-many-to-many-using-annotations-1.html
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 中吗?
我真的很感谢你对这个问题的帮助。
您首先需要从数据库获取 Student,然后将课程添加到该对象,然后保存获取的对象。
这样,您将创建一个新的学生对象,这个新的学生对象在“ID”实例变量中具有空值。在我看来,Hibernate 必须将此实例变量映射到主键进行查找,如果找到 id,则更新记录,否则插入新记录。
是的,如果您需要为现有学生添加课程,您可能需要首先从获取的学生对象中获取集合,然后在该集合中添加课程,然后保存......否则新的哈希集将只包含新课程和之前的记录将被覆盖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)