跳到主要内容

插入冲突

冲突处理用于决定插入数据与已有记录匹配时应当报错、忽略还是更新,常见于任务重放、数据同步、重复导入和“存在则更新”场景。它属于 INSERT 的执行策略,不等同于单独执行普通 UPDATE。

处理方式

策略Oracle 语句结果
IntoINSERT INTO ... VALUES (...)冲突时由数据库报错
IgnoreMERGE ... WHEN NOT MATCHED THEN INSERT已匹配记录保持不变,未匹配记录插入
UpdateMERGE ... WHEN MATCHED THEN UPDATE ... WHEN NOT MATCHED THEN INSERT已匹配记录更新,未匹配记录插入

MERGE 使用 SELECT ... FROM dual 构造源数据,并以实体映射中的主键列作为匹配条件。

如何使用

int rows = lambda.insert(UserInfo.class)
.onDuplicateStrategy(DuplicateKeyStrategy.Update)
.applyEntity(user)
.executeSumResult();

将策略改为 Ignore 可跳过已匹配记录;省略配置或使用 Into 则执行普通 INSERT。通用 API 说明见新增操作

注意事项

  • Ignore 和 Update 必须配置实体主键;dbVisitor 不会自动选择其他业务唯一键。
  • 主键映射不会替数据库创建约束,匹配列应能唯一定位记录。
  • Ignore 只跳过已匹配记录,不会忽略其他数据库错误。
  • MERGE 由数据库一次执行;多条实体写入是否整体提交仍取决于事务边界。