2014-01-14 3 views
1

В приложении, что я буду работать, у меня есть Senario,Объект из другого сеанса - saveOrUpdate в другой сеанс?

UI обновляет некоторые данные, которые уже retrived из базы данных и отправляет объект обратно на сервер (скажем, с помощью EntityTag.java), retrives сервера объект снова из БД (скажем, Entity.java, который является файлом сопоставления в спящем режиме) и копирует все значения из EntityTag в Entity.java objct.

Теперь, используя некоторую услугу, он пытается сохранить обновленный объект Entity.java. Это происходит в весенних декларативных транзакциях. Итак, я предполагаю, что новая транзакция начинается с этой службы.

То, что я надеялся увидеть в этом методе обслуживания, - это сеанс. merge(), потому что мы обновили объект, который был отсоединен, но здесь они используют saveOrUpdate для объекта entity.java. Я вижу, что объект обновляется в таблицу без каких-либо проблем. Это настолько странно, что до сих пор я думал, что слияние объединит объект в сеанс, а затем, я могу зафиксировать изменения, это кажется мне суровым.

В каких случаях saveandupdate работает без проблем?

enter image description here

ответ

1

Смотрите этот answer, saveOrUpdate работает хорошо, если там никогда не риск, что не существует уже объект с тем же идентификатором базы данных, связанным с сессией, где saveOrUpdate вызываются.

Если объект уже существует с тем же идентификатором базы данных, saveOrUpdate выдает сообщение об ошибке, а merge просто заменит объект в сеансе новым объектом и вернет ссылку на новый прикрепленный объект.

У Hibernate был метод под названием saveOrUpdateCopy, который предоставил то же самое, что и ток merge, , который стандартизован как слияние в JPA.

Хотя saveOrUpdate по-прежнему доступен и используются во многих учебных пособиях, вы бы лучше всегда использовать merge при работе с отдельными объектами, как это трудно/ошибками, чтобы попытаться угадать, если объект уже находится в сеансе.

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

  • Нет связанных вопросов^_^