1

Possible Duplicate:
Spring + Hibernate : a different object with the same identifier value was already associated with the sessionспящий режим - другой объект с тем же значением идентификатора был уже связан с сессией

После изменения @id в виде Entity от

@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 

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

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

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

+0

Показанный код внутри сеанса может помочь. – samitgaur

ответ

4

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

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

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

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

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

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

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

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