saveOrUpdate
совершенно не требуется для прикрепленного экземпляра.Hibernate автоматически сохранит состояние присоединенного объекта
- в конце транзакции
- при выполнении запроса, результат которого может зависеть от нового состояния объекта
- при явном вызове сброса в сеансе
Присоединенный объект - это объект, который вы извлекли из сеанса (из вызова для получения, загрузки или из запроса), или что у вас естьсделать постоянным через persist, save, update или merge (в этом последнем случае переданный объект не присоединяется, а возвращаемый объект есть).
Тогда почему saveOrUpdate
полезен?Полезно сделать временный или отключенный объект постоянным, т. Е. Объект, который не присоединен к сеансу, либо потому, что он новый, либо потому, что он был присоединен ранее, но стал отсоединенным после закрытия сеанса.
ИдеяHibernate - сбросить измененное состояние (т.е. выполнить запрос SQL на обновление) только тогда, когда это необходимо, в самое позднее возможное время.Таким образом, он может избежать ненужных обновлений и, следовательно, сделать код более эффективным.Ваше первое обновление не требуется, если вы не выполняете собственный SQL-запрос в одной транзакции между двумя обновлениями.Почему вы хотите, чтобы промежуточное состояние сохранялось?