Возвращение количества обновленных строк при UPserting в таблицу Postgres с использованием jOOQ - PullRequest
1 голос
/ 20 сентября 2019

Я загружаю некоторые данные в таблицу Postgres, используя методы jOOQ insertInto() и onDuplicateKeyUpdate().Позже я хочу узнать, сколько дубликатов было в моих данных, и, следовательно, их необходимо вернуть, если строка была вставлена ​​или обновлена ​​.

Из моего исследования, проведенного в Postgres .Я нашел RETURNING (not MY_TABLE.xmax = 0) AS updated как правильный вариант.Однако автоматически сгенерированные классы таблиц Java из jOOQ, похоже, не дают мне доступа к системным столбцам postgres, таким как xmax.

Пока мой запрос:

dsl.insertInto(MY_TABLE)
        .columns(
                // pkey columns
                MY_TABLE.SHIFT,
                MY_TABLE.DATE_UTC,
                MY_TABLE.TIME_UTC,

                MY_TABLE.DURATION,
        )
        .values(
                shiftId,
                utcDateId,
                utcTime,
                duration
        )
        .onDuplicateKeyUpdate()
        .set(MY_TABLE.DURATION, newDuration)
        .returning((MY_TABLE.xmax = 0).`às`("inserted"))
        .execute()

Это приводит к следующей ошибке времени компиляции:

Ошибка: Kotlin: Неразрешенная ссылка: XMAX

Я перепроверил свою конфигурацию создания таблицы Maven jOOQ и не исключаю ни одного столбца,Я также прочитал все, что смог найти на собственном веб-сайте jOOQ, но не нашел никакой полезной информации для этого конкретного варианта использования.

Любые советы о том, что я мог бы сделать здесь?

1 Ответ

2 голосов
/ 20 сентября 2019

В этом случае вы должны использовать jOOQ SQL-шаблон .В частности, посмотрите на метод DSL.field().Как то так: field("my_table.xmax", int.class).eq(0).

...