Hibernate多对多,重复相同的记录

时间:2011-10-28 06:54:25

标签: hibernate many-to-many duplicates record

我尝试使用Annotations进行多对多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中吗? 我非常感谢你对这个问题的帮助。

1 个答案:

答案 0 :(得分:0)

首先需要从数据库中获取Student,然后向该对象添加课程,然后保存获取的对象。

这样,您正在创建一个新的Student对象,这个新的student对象在“ID”实例变量中有一个null。在我看来,Hibernate必须将此实例变量映射到主键以进行查找,如果找到id,则更新记录,否则插入新记录。

是的,如果你需要为现有学生添加课程,你可能想先从获取的学生对象中设置,然后在该组中添加一个课程,然后保存......否则新的哈希集将仅包含新课程,之前的记录将被覆盖。