gpt4 book ai didi

java - 尽管 saveOrUpdate 失败,但版本已增加

转载 作者:行者123 更新时间:2023-11-30 11:46:12 27 4
gpt4 key购买 nike

我在数据库中有一个由 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, code1, name1, 1)
(2, code2, name2, 1)

使用 Spring hibernate :
第 1 步:
我将第 1 行加载到实体,然后将代码更改为 code2(与第 2 行相同)。然后调用
org.springframework.orm.hibernate3.support.HibernateDaoSupport.getHibernateTemplate().saveOrUpdate(entity);
--> 抛出“重复代码”异常 --> OK

第 2 步:我将代码更改为 code3,然后通过上述方法再次保存 --> 它引发了异常“该行已被其他用户更新或删除的乐观异常”(我只是在单个用户上测试)--> KO

跟踪后我发现在第 1 步之后实体上的版本自动增加 1。我认为不应该,因为发生了异常。

我的问题:

Is that the bug of spring framework or hibernate?

最佳答案

听起来不像是错误。我不知道它是否清楚地记录在 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.

关于java - 尽管 saveOrUpdate 失败,但版本已增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9933243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com