我尝试了使用“注释”对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,然后将课程添加到该对象,然后保存获取的对象。
这样,您正在创建一个新的Student对象,该新的Student对象在“ ID”实例变量中具有null。在我看来,Hibernate必须将此实例变量映射到主键以进行查找,如果找到id,则记录将更新,否则将插入新记录。
是的,如果您需要为现有学生添加课程,则您可能希望首先从获取的学生对象中获取课程,然后在该课程中添加课程,然后保存…否则,新哈希集将仅包含新课程和以前的记录将被覆盖。