Сведения о вопросе

Codeliver

19:15, 26th August, 2020

Теги

hibernate   orm    

Hibernate saveOrUpdate с другим объектом в сеансе

Просмотров: 446   Ответов: 2

Есть ли какой-либо способ сохранить объект с помощью Hibernate, если уже есть объект, использующий этот идентификатор, загруженный в сеанс?

  • Выполнение session.contains(obj) , по-видимому, возвращает true только в том случае, если сеанс содержит именно этот объект, а не другой объект с тем же ID.
  • Использование merge(obj) вызывает исключение, если объект является новым



  Сведения об ответе

lool

05:52, 15th August, 2020

Вы не пробовали позвонить ?SaveOrUpdateCopy()? Он должен работать во всех случаях, если в сеансе есть объект с тем же идентификатором или если его вообще нет. Это в основном метод catch-all, поскольку он преобразует временный объект в постоянный (Save), обновляет объект, если он существует (Update), или даже обрабатывает, если сущность является копией уже существующего объекта (Copy).

В противном случае вам, возможно, придется идентифицировать И.Evict() существующий объект перед присоединением (.Update()) вашего объекта "new". Это должно быть достаточно легко сделать:

IPersistable entity = Whatever(); // This is the object we're trying to update
// (IPersistable has an id field)
session.Evict(session.Get(entity.GetType(), entity.Id));
session.SaveOrUpdate(entity);

Хотя приведенный выше код, вероятно, мог бы сделать с некоторой проверкой null для .Get() звонок.


  Сведения об ответе

lats

20:29, 19th August, 2020

Как насчёт:

session.replicate(entity, ReplicationMode.OVERWRITE);
?


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться