Hibernate - другой объект с тем же значением идентификатора уже был связан с сеансом

Возможный дубликат:
Spring + Hibernate: другой объект с тем же значением идентификатора уже был связан с сеансом

После изменения @id сущности из

@Id
private int getId(){
     return this.id;
}

в

@Id
private String getLogin(){
     return this.login;
}

Я получаю ошибку:

a different object with the same identifier
value was already associated with the session

В веб-приложении ничего не изменилось. Чтение сущности, а затем изменение некоторых полей в форме, а затем после отправки я попытался сохранить или обновить сущность. С int как @Id не было никаких проблем, но теперь с String как @Id Я получаю вышеуказанную ошибку путем обновления или сохранения сущности:

 @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
 public void saveOrUpdate(User u) {  
  getHibernateTemplate().saveOrUpdate(u);  
 }

В чем может быть проблема?

1 ответ

Решение

Это означает, что вы пытаетесь сохранить или обновить отдельный объект, который имеет неуникальный или установленный автоматически увеличивающийся идентификатор.

Если вы хотите вставить новый объект, вы хотите, чтобы его идентификатор был пустым или уникальным в зависимости от того, используете ли вы автоинкремент или нет (ноль для автоинкрементации, установите уникальное значение для неавтоинкрементации), если вы хотите обновить если вы хотите убедиться, что он привязан к контексту.

Вы можете присоединить объект к контексту, используя session.merge(объект), который возвращает прикрепленную версию объекта.

Другими словами:

Если вы пытаетесь вставить, убедитесь, что поле, настроенное как Id, является нулевым, если вы используете автоинкремент или уникально.

Если вы пытаетесь обновить, убедитесь, что объект подключен. Вы можете сделать это, выбрав его из своей базы данных (на основе имеющихся у вас полей), внести изменения, а затем обновить или просто вызвать метод session.merge(объект) и получить прикрепленную версию объекта, которую затем можно Также обновите.

Другие вопросы по тегам