You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Record对象指定onDuplicateKeyIgnore实现MySQL插入去重

使用jOOQ Record对象实现插入时忽略重复主键记录

单个Record插入

jOOQ的Record对象本身没有直接提供onDuplicateKeyIgnore()方法,无法通过record.store()直接实现忽略重复主键的逻辑。正确的做法是通过DSLContext的insert()方法包裹Record对象,显式指定忽略策略:

// 创建并填充Record
var record = dslContext.newRecord(AUTHOR);
record.setId(123); // 使用对应字段的setter,或 record.set(AUTHOR.ID, 123)
record.setLastName("Koontz");

// 执行插入并忽略重复主键
dslContext.insert(record)
          .onDuplicateKeyIgnore()
          .execute();

批量插入一批记录

如果需要批量处理多条Record,同样通过DSLContext.insert()传入Record列表即可:

// 构建待插入的Record列表
List<AuthorRecord> records = new ArrayList<>();

var record1 = dslContext.newRecord(AUTHOR);
record1.setId(123);
record1.setLastName("Koontz");
records.add(record1);

var record2 = dslContext.newRecord(AUTHOR);
record2.setId(456);
record2.setLastName("King");
records.add(record2);

// 批量插入并忽略重复主键
dslContext.insert(records)
          .onDuplicateKeyIgnore()
          .execute();

说明

  • 避免使用record.store():该方法默认行为是UPSERT(主键存在则更新,不存在则插入),无法直接修改为忽略重复主键的逻辑。
  • 字段赋值注意:示例中使用了实体类的setter方法(如setId()),也可以通过record.set(AUTHOR.ID, 123)的方式直接指定字段,更符合jOOQ的DSL风格。

内容的提问来源于stack exchange,提问作者Mahdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:50:25