Почему ваш подход не работает?
jOOQ не переводит произвольные выражения Java в SQL.Т.е. ваша проверка TABLENAME.COUNTER == null
вычисляется в Java до передачи выражения в jOOQ.Он никогда не будет сгенерирован в SQL.А поскольку TABLENAME.COUNTER
, будучи генерируемым кодом, никогда не будет null
, условное выражение действительно бессмысленно.
Решения
Вы можете использовать DSL.coalesce()
илиDSL.nvl()
или DSL.ifnull()
.set(TABLENAME.COUNTER, coalesce(TABLENAME.COUNTER, inline(-1)).add(incrementValue))
Существует также функция стиля Oracle DSL.nvl2()
, которую можно использовать:
.set(TABLENAME.COUNTER,
nvl2(TABLENAME.COUNTER, TABLENAME.COUNTER.add(incrementValue), inline(0)))
В качестве альтернативы, напишите CASE
выражение
.set(TABLENAME.COUNTER,
when(TABLENAME.COUNTER.isNull(), inline(0))
.otherwise(TABLENAME.COUNTER.add(incrementValue)))
Как всегда, вышеизложенное предполагает, что у вас есть следующий статический импорт:
import static org.jooq.impl.DSL.*;