Hibernate Many-to-Many, дублирует одну и ту же запись - PullRequest
1 голос
/ 28 октября 2011

Я попробовал Hibernate Mapping «многие ко многим», используя аннотации с примером, приведенным в 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);

Снова дублирует студента Ишвара в таблице.

        +------------+--------------+
        | STUDENT_ID | STUDENT_NAME |
        +------------+--------------+
        |          1 | Eswar        |
        |          2 | Joe          |
        |          3 | Eswar        |
        +------------+--------------+

Не могу ли я добавить курсы в существующий Eswar? Я очень ценю вашу помощь в решении этой проблемы.

1 Ответ

0 голосов
/ 28 октября 2011

Сначала необходимо получить Студента из базы данных, а затем добавить курсы к этому объекту, а затем сохранить выбранный объект.

Таким образом, вы создаете новый объект Student, этот новый объект Student имеет значение NULL в переменной экземпляра «ID». Мне кажется, что Hibernate должен сопоставить эту переменную экземпляра с первичным ключом для поиска, если идентификатор найден, запись обновляется, или вставляется новая запись ..

и да, если вам нужно добавить курс для существующего студента, вы, возможно, захотите сначала получить набор из извлеченного объекта студента, затем добавить курс в этот набор, а затем сохранить ...... иначе новый набор хэшей будет содержать только новый курс, а предыдущая запись будет перезаписана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...