2012-09-19 2 views
0

У меня очень большая проблема с Hibernate. При попытке обновить или сохранить элемент в таблице, у меня есть эта ошибка:Hibernate не может сохранить/обновить/удалить объект

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 

Эта ошибка возникает при Звоню службу DAO:

Session session = sessionFactory.getCurrentSession(); 
session.saveOrUpdate(object); 
session.flush(); 

Когда я отладки, после промывки() генерируется ошибка.

Здесь ключ таблицы:

@EmbeddedId 
@AttributeOverrides({ 
     @AttributeOverride(name = "sysDocId", column = @Column(name = "SYS_DOC_ID", nullable = false)), 
     @AttributeOverride(name = "sysDataFile", column = @Column(name = "SYS_DATA_FILE", nullable = false)) }) 
public RelDocFileId getId() { 
    return this.id; 
} 

Спасибо Все

ответ

0

Это означало бы, что Hibernate не может найти эту запись в базе данных, UPDATE оператор возвращает результат: 0 строк были затронуты это обновление.

Hibernate указывает, что то, что вы собираетесь обновлять, больше не существует, что означает, что вы сохраняете устаревшие данные.

Вы должны либо не допускать эту ситуацию, либо соответствующим образом обрабатывать это исключение, закрывая сеанс и высказывая пользователю: «Эй, вы видите устаревшие данные, он больше не существует».

+0

Даже во вставке или удалении У меня есть эта проблема – Mohamed

+0

На удаление это такая же ситуация, как я описал - она ​​пытается удалить и ничего не удалять. На вставках .. у вас есть сущность, вставленная каскадно? Hibernate будет использовать saveOrUpdate для этих целей. Также у вас есть «назначенная» стратегия генерации идентификатора? Hibernate может не распознать, является ли объект новым, или он был сохранен уже, если вы указали ID самостоятельно. Было бы полезно сопоставить и способ внесения/удаления/обновления. –

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