Hibernate @Version Field error - PullRequest
       4

Hibernate @Version Field error

2 голосов
/ 01 мая 2009

Я использую Hibernate, Spring, Struts Framework для моего приложения.

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

Всякий раз, когда я обновляю существующую запись моей таблицы Стран, которая имеет версию 0, она работает нормально, и обновляет запись, обновляет поле версии до 1.

Но всякий раз, когда я пытаюсь обновить эту запись версии 1, выдается следующее сообщение:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.sufalam.business.marketing.model.bean.Country] with identifier [3]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.company.business.marketing.model.bean.Country#3]

Есть ли способ решить это?

Ответы [ 3 ]

3 голосов
/ 19 мая 2009

Столбец версии Hibernate позволяет реализовать оптимистический контроль параллелизма .

Каждый раз, когда объект должен обновляться, Hibernate проверяет, совпадает ли значение версии, хранящееся в базе данных, со значением версии в объекте. Если они разные, генерируется исключение StaleObjectStateException, что означает, что кто-то еще обновил объект, в то время как текущий сеанс загрузил, отредактировал и сохранил его.

Вы должны убедиться, что значение версии в вашем объекте установлено на правильное значение. Иногда, если вы отсоединяете объекты от сеанса и повторно присоединяете их (объединяете), столбец версии значения устанавливается неправильно (например, в веб-приложениях, когда значения извлекаются из форм)

0 голосов
/ 02 мая 2009

Я точно не помню, но ты должен держаться за экземпляр, который ты спас? По крайней мере, при использовании JPA возвращаемое значение из метода слияния.

0 голосов
/ 01 мая 2009

"Строка была обновлена ​​или удалена другой транзакцией". В прошлый раз, когда я получил это, я делал вещи, распределенные по нескольким объектам org.hibernate.Session.

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