一尘不染

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

hibernate

我尝试了使用“注释”对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中吗?非常感谢您对这个问题的帮助。


阅读 199

收藏
2020-06-20

共1个答案

一尘不染

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

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

是的,如果您需要为现有学生添加课程,则您可能希望首先从获取的学生对象中获取课程,然后在该课程中添加课程,然后保存…否则,新哈希集将仅包含新课程和以前的记录将被覆盖。

2020-06-20