2012-03-29 5 views
2

У меня есть таблица в базе данных создать с помощью SQL:версия увеличивается, хотя saveOrUpdate не удалось

CREATE TABLE `s_supplier` (<br/> 
    `id` int(11) NOT NULL auto_increment,<br/> 
    `code` varchar(32) collate utf8_bin NOT NULL,<br/> 
    `name` varchar(128) collate utf8_bin NOT NULL,<br/> 
    `version` int(11) NOT NULL default '0'<br/> 
    PRIMARY KEY (`id`),<br/> 
    UNIQUE KEY `ui_uom_category_code` (`code`)<br/> 
) 

База данных существующей 2 строки:
(1, code1, NAME1 1)
(2, Кодекса2 , имя2, 1)

Используя пружинный спящий режим:
шаг 1:
я загрузить строку 1 к объекту, а затем изменить код для code2 (такой же, как ряд 2). , а затем позвоните
org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate(). SaveOrUpdate (entity);
-> Это вызывает исключение «дубликат кода» -> OK

шаг 2: изменить код code3, а затем сохранить снова описанным выше способом -> Это вызывает исключение «оптимистичным исключение строка была обновлена ​​или удалена другим пользователем »(я просто тестирую на одного пользователя) -> KO

После отслеживания я обнаружил, что после шага 1 версия автоматически увеличивает 1 на объекте. Я думаю, что это не должно произойти, потому что произошло исключение.

Мой вопрос:

Является ли, что ошибка яровых рамок или спящий режим?

ответ

1

Не похоже на ошибку. Я не знаю, это четко задокументировано в спящем документации, но поведение соответствует спецификации JPA:

Transaction rollback typically causes the persistence context to be in an 
inconsistent state at the point of rollback. In particular, the state of 
version attributes and generated state (e.g., generated primary keys) may 
be inconsistent. 
Смежные вопросы