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()
}
Другие вопросы по тегам