jOOQ - многострочный MySQL INSERT... ON DUPLICATE KEY UPDATE с использованием функции VALUES()
Поддерживает ли jOOQ функцию VALUES() для использования в INSERT... ON DUPLICATE KEY UPDATE?
Если нет, какие-либо предложения о том, как это сделать вместо этого? (Для большого количества строк)
См.: http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html
2 ответа
Решение
Нет, по состоянию на jOOQ 3.8 такой поддержки нет, и в настоящее время поддержка не планируется добавлять. Вы можете легко заставить это работать на вашей стороне, используя простой SQL, хотя:
public static <T> Field<T> values(Field<T> field) {
return DSL.field("values({0})", field.getDataType(), field);
}
Для получения дополнительной информации о "обычном SQL" в jOOQ см. http://www.jooq.org/doc/latest/manual/sql-building/plain-sql
Обновление на 2021 год, вы можете использовать InsertOnConflictWhereStep от Jooq .
Вот пример того, как это может выглядеть (в Котлине):
fun saveOrUpdate(items: Iterable<SomeClass>) {
dsl.insertInto(
TABLE,
TABLE.FIELD1,
TABLE.FIELD2,
).apply {
items.forEach { item ->
values(
item.field1,
item.field2
)
.onConflict(
TABLE.FIELD1
)
.doUpdate()
.set(TABLE.FIELD2, item.field2)
.set(TABLE.UPDATED_AT, currentOffsetDateTime())
}
}
.execute()
}