Я пытаюсь вставить новые строки в базу данных, но Hibernate не может распознать, что мои объекты должны быть вставлены.У меня есть таблица Sponsor, таблица Course и таблица SponsorCourse, которая является пересечением между ними.Первичный ключ SponsorCourse является составным идентификатором класса SponsorCoursePK, который содержит два целых числа: первичный ключ спонсора и первичный ключ курса.SponsorCoursePK реализует функции equals () и hashcode ().
Моя цель - полная копия таблицы Course, включая все ее строки SponsorCourse.
- Сначала я запрашиваю у Hibernate список SponsorCourses, связанных с существующей строкой Course.
- Затем я создаю новый объект Course и фиксирую его в базе данных.(По устаревшим причинам, объекты Course не управляются Hibernate).
- Далее я перебираю список SponsorCourses, который Hibernate дал мне для старого курса, и изменяю часть первичного ключа SponsorCourse, в которой хранится идентификатор курсаот старого courseid к id вновь созданного курса.
- Далее я вызываю saveOrUpdate, чтобы попытаться заставить Hibernate создать новые строки.
Когда я смотрю на посылки SQL Hibernate, не существует операторов «вставки»: Hibernate не может распознать, что мои новые объекты «грязные» и их нужно вставить, даже если я изменил частьпервичного ключа.Если я изменю любое другое значение SponsorCourse, Hibernate распознает объект как грязный и вставит новую строку.
Мой альтернативный подход заключается в создании совершенно новых объектов SponsorCourse и сохранении их.Я сбит с толку, потому что для других дочерних таблиц, где первичный ключ не является составным первичным ключом, кажется, что он работает для извлечения строки, изменения первичного ключа и затем позволяет Hibernate вставлять новую строку на основе грязного объекта с новымПервичный ключ.
Документов Hibernate, в частности главы 8.4 (составные идентификаторы) и главы 10 (обсуждающие изменение объектов) справочника Hibernate 3.0, было недостаточно, чтобы помочь мне понять.
Ожидаю ли я что-то не так, думая, что могу изменить первичный ключ объекта, извлеченного Hibernate, и думая, что он вставит новую строку?Должен ли я всегда создавать свои собственные, новые объекты в такой ситуации?Или это проблема уникальности при попытке принудительной вставки путем изменения части первичного ключа, который является составным идентификатором?
Спасибо.Наверное, очевидно, я новичок в рамках.