2015-09-04 5 views
-1

Я искал для некоторых реальных сценариев использования Hibernate/JPA методысценарии реального мира для различных JPA методов

  1. как когда использовать слияние() и когда использовать сохраняется()?
  2. Когда использовать getReference() vs find()?
  3. , когда нам требуется отсоединить объект? и каково использование отделения объекта?

ответ

1

Вот некоторые примеры:

  1. persist() следует использовать всякий раз, когда вам нужно поместить объект новый в базу данных. Хотя merge() будет сохраняться объект, если он не существует, в некоторых случаях, когда мы использовали , для странных новых объектов произошли странные вещи (для меня, по крайней мере). Один случай, когда merge() полезен, - это когда вы сначала получаете объект из db, передаете его для просмотра/уровня контроллера (или отсоединяете его каким-либо другим способом), изменяете его и хотите сохранить изменения. С merge() это делается автоматически, иначе вам нужно было бы получить объект из db по id и скопировать все поля из отсоединенного (если вы точно не знаете, что изменилось).
  2. Когда вы знаете идентификатор какого-либо объекта объекта (либо путем доступа к его отдельной копии, либо каким-либо другим способом), который вам просто нужно связать с другим объектом объекта. С getReference() вы не загружаете весь объект в сеанс, вы устанавливаете его ссылку только в прикрепленный объект, чтобы в итоге вы получили (по крайней мере) один запрос меньше, чем с find(). С другой стороны, find() загружает весь объект, не нужно указывать варианты использования для этого.
  3. Хотя для этого примера следует использовать DTO, представьте, что у вас есть веб-служба, возвращающая экземпляр вашего объекта. И вы не хотите возвращать все свои данные, вы хотите удалить некоторые атрибуты. Если вы сделаете это на прикрепленном объекте, эти нули будут сохранены в базе данных. Таким образом, вы отсоединяете его и безопасно изменяете, прежде чем возвращать его вызывающему абоненту веб-службы.
+0

Почему слияние создает копию при сохранении переходного объекта? – eatSleepCode

+0

[Здесь] (http://spitballer.blogspot.rs/2010/04/jpa-persisting-vs-merging-entites.html) - хорошая статья о 'merge' и' persist', она должна очистить вещи для вы. –

+0

И еще несколько полезных ссылок: [link1] (http://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge) и [link2] (http: //techblog.bozho .net/как-делает-слияние-работа-в-JPA-и-спящий режим /) –

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