Слияние сущностей в спящем режиме - PullRequest
0 голосов
/ 31 мая 2011

Каков наилучший способ сделать это:

У меня есть несколько сущностей, которые хранятся в виде сущностей Hibernate, и они содержат некоторые поля, которые должны быть уникальными для одной строки. Поэтому, когда я создаю другую сущность с таким набором полей, равным уже сохраненному, я хочу переопределить старую запись новой, иначе создайте новую запись.

Каков наилучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Если это первичный ключ вашей сущности, вы можете использовать session.merge(entity) или session.saveOrUpdate(entity)

Если это еще одно уникальное ограничение, вам придется обрабатывать это вручную - сначала попытайтесь найти сущностьс этим значением (с запросом) и, если он не существует, сохраните новое, в противном случае передайте все поля (кроме первичного ключа)

0 голосов
/ 31 мая 2011

используйте вместо этого .merge ().

С http://www.stevideter.com/2008/12/07/saveorupdate-versus-merge-in-hibernate/:

Теория: если мы затем изменим наш отсоединенный объект и захотим обновить его, мы должны заново присоединить объект. Во время этого процесса присоединения Hibernate проверит, есть ли другие копии того же объекта. Если он что-то обнаружит, он должен сказать нам, что больше не знает, что такое «настоящая» копия. Возможно, другие изменения были внесены в те другие копии, которые мы ожидаем сохранить, но Hibernate не знает о них, потому что в то время не управлял ими.

Вместо сохранения, возможно, неверных данных, Hibernate сообщает нам о проблеме через исключение NonUniqueObjectException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...