作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类看起来像
public class ABLink {
private Long aId;
private Long bId;
}
这个类在数据库(Postgresql)中有一个对应的实体,看起来像:
CREATE TABLE a_b_link(
a_id BIGINT NOT NULL,
b_id BIGINT NOT NULL,
CONSTRAINT a_b_link_pk
PRIMARY KEY (a_id, b_id)
);
我正在尝试以这种方式使用 jooq loader api 执行批量插入:
dsl.loadInto(A_B_LINK).batchAll()
.onDuplicateKeyUpdate()
.loadRecords(records)
.fields(A_B_LINK.fields())
.execute();
因为我正在尝试为这样的插入逻辑做一个批处理:
insertInto(A_B_LINK).set(record).onDuplicateKeyUpdate().set(record).execute()
但我遇到过这样的错误:
Batch entry 0 insert into "schema"."a_b_link" ("a_id", "b_id") values (3273, 8) on conflict ("a_id", "b_id") do update set [ no fields are updated ] was aborted: ERROR: syntax error at or near "["
因为没有要更新的字段。只有这个ID。我尝试在加载器 api 中使用 onDuplicateKeyUpdate 进行批处理,但我收到一个错误:
Cannot apply batch loading with onDuplicateKeyIgnore flag.
我尝试在没有任何重复键策略的情况下执行批处理,例如:
dsl.loadInto(A_B_LINK).batchAll()
.loadRecords(records)
.fields(A_B_LINK.fields())
.execute();
当然,我时不时会收到这种方法的违规异常。
我将非常感谢与此问题相关的任何帮助、建议或提示。
最佳答案
此错误的原因是如果您的表仅包含属于主键一部分的字段,则没有要更新的字段。
有两种方法可以“解决”这个问题:
onDuplicateKeyUpdate()
,而是使用 onDuplicateKeyIgnore()
。您已经在标题中提到了这一点,但没有在代码中提到。请注意,目前(从 jOOQ 3.10 开始)不支持 batchAll()
和 onDuplicateKeyIgnore()
的组合,不幸的是:https://github.com/jOOQ/jOOQ/issues/7253 关于java - 批量插入onDuplcateKey忽略JOOQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110621/
我是一名优秀的程序员,十分优秀!