barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 29 июня 2012 г.

Hibernate: копирование persistent-объекта

Задача:

Имеется некоторый persistent-объект, ассоциированный с текущей сессией. Необходимо модифицировать некоторые его поля и сохранить в БД как копию, т.е. не заменяя предыдущий объект (выполняя INSERT вместо UPDATE).

Решение:

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

Комментариев нет:

Отправить комментарий