2010-12-16 3 views
7

В чем разница между HibernateSession методами saveOrUpdate(Object) и merge(Object)? Кажется, что оба метода генерируют оператор SQLINSERT, когда данный объект не существует в соответствующей таблице, и UPDATE, когда он существует.Каковы различия между методами сеанса Hibernate saveOrUpdate() и merge()?

+1

Вы действительно прочитали документы java, с которыми вы связались? :) – willcodejavaforfood

+0

Да, я сделал. Основное отличие, которое я вижу в том, что 'merge()' загружает объект, который не находится в сеансе, в то время как 'saveOrUpdate()' does not. Означает ли это, что 'saveOrUpdate()' частичного объекта перезаписывает все поля, а 'merge()' перезаписывает только те поля, которые были установлены для ненулевых значений? Или оба дают одинаковый результат? –

+0

Возможный дубликат [NHibernate - Разница между сеансом.Merge и session.SaveOrUpdate?] (Http://stackoverflow.com/questions/170962/nhibernate-difference-between-session-merge-and-session-saveorupdate) –

ответ

1

Несмотря на то, что это для NHibernate, это также относится к Hibernate:

NHibernate - Difference between session.Merge and session.SaveOrUpdate?

+0

Согласно третий комментарий, NHibernate 'Merge()' и 'SaveOrUpdate()' производит точно такой же результат. (Комментатор заявляет, что 'SaveOrUpdate()' просто делегирует 'Merge()'.) –

+1

Хорошо, если это правда, это не то же самое для Hibernate :-) Оба вызова * могут * давать одинаковый результат, но зависит на состояние объекта. Вместо репликации документации я предоставил только обновленную ссылку :-) http://docs.jboss.org/hibernate/core/3.5/reference/en/html/objectstate.html#objectstate-saveorupdate – jpkrohling

1

Если я правильно помню, слияние для ип-ассоциированных случаев, которые в настоящее время не удалось. Он будет выполнять поиск на основе id и объединить два.

+0

Что это такое означает «объединить два объекта»? Как он знает, какие поля объединяются? Объединяет ли он только те, которые не отличаются друг от друга, и те, которые отличаются и не равны нулю? Первый случай ничем не отличается от обновления, а второй отличается от сохранения и обновления. –

+0

Посмотрите на второй ответ на связанный вопрос, который цитирует спецификацию. 3.2.4.1 - http://stackoverflow.com/questions/3870844/best-approach-for-updation-using-jpa Похоже, что отсоединенный экземпляр перезапишет большую часть данных, если только поле не помечено как lazy или класс поддерживает версии. – Scott

Смежные вопросы