Ich habe eine Tabelle in der Datenbank erstellt durch SQL:
CREATE TABLE `s_supplier` (
`id` int(11) NOT NULL auto_increment,
`code` varchar(32) collate utf8_bin NOT NULL,
`name` varchar(128) collate utf8_bin NOT NULL,
`version` int(11) NOT NULL default '0'
PRIMARY KEY (`id`),
UNIQUE KEY `ui_uom_category_code` (`code`)
)
Die Datenbank hat 2 Zeilen:
(1, code1, name1, 1)
(2, code2, name2, 1)
Mit spring-hibernate:
Schritt 1:
Ich lade Zeile 1 in die Entität und ändere dann den Code zu code2 (wie in Zeile 2). und dann rufe auf
org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate().saveOrUpdate(entity);
--> Es wird die Ausnahme 'doppelter Code' ausgelöst --> OK
Schritt 2: Ich ändere den Code zu code3 und speichere erneut mit der obigen Methode --> Es wird die Ausnahme 'optimistische Ausnahme, die Zeile wurde von einem anderen Benutzer aktualisiert oder gelöscht' ausgelöst (Ich habe es nur mit einem Benutzer getestet) --> KO
Nachverfolgung habe ich festgestellt, dass nach Schritt 1 die Version automatisch um 1 erhöht wird in der Entität. Ich denke, das sollte nicht passieren, weil eine Ausnahme auftrat.
Meine Frage:
Ist das ein Bug im Spring Framework oder Hibernate?