我在批量插入时遇到以下问题:
dslContext.batch(
dslContext.insertInto(
TABLE,
FIELD_1,
FIELD_2,
FIELD_3,
FIELD_4_TS_VECTOR
).values(0L, "", "", "")
.onConflictDoNothing()
).bind(value1, value2, value3, value4.toTsvector())
.execute()
其中 toTsvector 是:
private fun String.toTsvector() =
DSL.field("to_tsvector('simple', {0})", this)
在这种情况下,DSL.field 似乎没有按预期工作,因为它没有绑定,而是返回值,并且该查询的执行失败,并显示:
org.jooq.exception.DataAccessException: SQL [insert into "table" ("field_1", "field_2", "field_3", "field_4_ts_vector") values (?, ?, ?, ?) on conflict do nothing]; Batch entry 0 insert into "table" ("field_1", "field_2", "field_3", "field_4_ts_vector") values (100500, 'value2', 'value3', 'value4') on conflict do nothing was aborted: ERROR: column "field_4_ts_vector" is of type tsvector but expression is of type character varying
但如果使用“通常”插入,一切正常:
dslContext.insertInto(
TABLE,
FIELD_1,
FIELD_2,
FIELD_3,
FIELD_4_TS_VECTOR
).values(value1, value2, value3, value4.toTsvector())
.onConflictDoNothing()
.execute()
Thanks!