Задача:
Имеется некоторый persistent-объект, ассоциированный с текущей сессией. Необходимо модифицировать некоторые его поля и сохранить в БД как копию, т.е. не заменяя предыдущий объект (выполняя INSERT вместо UPDATE).
Решение:
Проблема заключается в том, что при вызове session.save() для persistent-объекта все равно выполняется UPDATE, как и при вызове session.update(). Для того, чтобы модифицированный объект трактовался Hibernate`ом как новый объект, а не как измененный уже имеющийся в БД объект, необходимо для этого объекта сначала выполнить session.evict(), а уже затем - session.save().
PS При установленном для связи cascade="evict" вызов session.evict() будет влиять также и на связанные объекты.
PS При установленном для связи cascade="evict" вызов session.evict() будет влиять также и на связанные объекты.
Комментариев нет:
Отправить комментарий