Версия увеличена, хотя saveOrUpdate не удалось - PullRequest
2 голосов
/ 30 марта 2012

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

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, код1, имя1, 1)(2, код2, имя2, 1)Использование spring-hibernate:шаг 1:Я загружаю строку 1 в сущность, а затем меняю код на code2 (так же, как строка 2).а затем позвоните org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate () saveOrUpdate (юридическое лицо);. -> Возникает исключение «дублирующий код» -> ОК

шаг 2: я изменяю код на code3, а затем снова сохраняю описанным выше способом -> Возникает исключение «оптимистическое исключение, когда строка была обновлена ​​или удалена другим пользователем» (я просто тестирую на одном пользователе)-> нокаутПосле отслеживания я обнаружил, что после шага 1 версия автоматически увеличивается на 1 для сущности.Я думаю, что не должно, потому что произошло исключение.Мой вопрос:

Это ошибка Spring Framework или Hibernate?

1 Ответ

1 голос
/ 30 марта 2012

Не похоже на ошибку. Я не знаю, четко ли это задокументировано в документации Hibernate, но поведение соответствует спецификации 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...