У вас все в порядке, но обновление работает немного иначе, чем вы описали.Если объект находится в сеансе (т.е. постоянный), обновление совершенно не нужно.Hibernate обрабатывает сохранение любых изменений объектов в сеансе, когда сеанс сбрасывается.Вызов update для них ничего не даст (и может повлечь за собой снижение производительности; я не уверен).
Обновление предназначено для вызова на отсоединенных объектах, то есть тех, которые сейчас находятся за пределами сеанса, в который они были загруженыПохоже, что объяснение @hvgotcodes неверно, поскольку обновление следует вызывать только в том случае, если в сеансе объект не .обновление может завершиться неудачно, если экземпляр объекта уже находится в сеансе.Слияние должно быть использовано в этом случае.Он объединяет изменения отдельного объекта с объектом в сеансе, если он существует.Если в сеансе нет объекта, он создаст новый.
Так часто вы вообще можете избежать вызова update / merge, но если вам в итоге придется вызывать один, слияние обрабатывает более широкий диапазон ситуаций.,Насколько я понимаю, единственная причина для использования обновления - это повышение производительности, если вы знаете, что оно не даст ошибок.
В этой теме также есть довольно хорошее резюме некоторых других методов гибернации..
Редактировать: я просто подумал, что должен сказать, что между слиянием и обновлением больше различий, чем я первоначально сказал.Обновление изменяет данную сущность, чтобы быть постоянной, тогда как слияние возвращает новую постоянную сущность.Для слияния вы должны выбросить старый объект.Другое отличие состоит в том, что слияние выполняет грязную проверку, выбирая из БД, прежде чем решить, записывать ли свои данные, тогда как обновление всегда сохраняет свои данные в БД, независимо от того, грязное оно или нет.
Возможно, есть и другие небольшие различия.Всегда полезно проверить поведение Hibernate, зарегистрировав сгенерированный SQL, потому что поведение не всегда соответствует документации, по крайней мере, по моему опыту.