barbitoff programmer`s blog

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

среда, 25 июля 2012 г.

Hibernate: обновление идентификатора persistent-объекта

Проблема:

При попытке выполнить сохранение (session.update()) persistent-объекта после изменения поля, являющегося идентификатором в hibernate-маппинге, валится исключение:
org.hibernate.HibernateException: identifier of an instance of ... was altered from ... to ...
Решение:

Обновлять идентификаторы у persistent-объекта нельзя (вероятно, это связано со спецификой генерации Hibernate`ом SQL-запросов на обновление). Если сделать для объекта session.evict(), а потом - session.save(), то добавится новая запись в БД, с новым идентификатором. Это тоже не то, что мы хотели. Остается другой вариант - выполнить session.delete(), а потом - session.save(). Тогда мы получим желаемое - идентификатор "обновится" в БД (точнее, сначала запись удалится, а потом - вставится с новыми идентификатором).

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

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