在我的代码库中,我们有一个 MyBatis 查询,如下所示,
INSERT INTO TABLE_A(
ID,
NAME,
VERSION
)
VALUES (
#id#,
#name#,
(select NVL(max(version), 0 ) + 1 from SAE_PROC_SETTING where name = #name#)
)
唯一约束是列名称和版本。如果多个用户同时插入值,有时我们会收到唯一约束错误。当我们检查时,名称和版本是相同的,并按预期抛出错误。
我的问题是,MyBatis 如何处理内部查询
(select NVL(max(version), 0 ) + 1 from TABLE_Awhere name = #name#)
此查询是否由 MyBatis 提交给 Oracle,然后 oracle 首先执行 SELECT 然后 INSERT 查询或 MyBatis 先执行 SELECT,然后替换 INSERT 中的值并在 Oracle 中提交 INSERT 查询(MyBatis 的 2 个步骤)?
如果像第二个选项一样处理,当两个人在同一时间插入同名时,有可能两个人都得到相同的版本。然后在尝试插入时,我们会得到 UniqueConstraint 错误。
请让我知道 MyBatis 如何在内部处理这个问题。任何指针都可以。
谢谢,标清