2016-12-09 4 views
1

У меня есть запрос в JOOQ, который содержит LEFT OUTER JOIN с другой таблицей. Это преднамеренно, так как нет гарантии, что соответствующая запись будет существовать, и в этом случае я все еще хочу получить значение из предыдущей таблицы и поставлю недостающие поля по умолчанию.Проверка JOOQ для нулевых полей в объекте записи?

Однако, поскольку функция getValue() с параметром по умолчанию становится устаревшей, как я могу проверить, содержит ли поле значение NULL?

Это довольно легко со строками, но логическое значение просто возвращается как false, то есть я не могу проверить, действительно ли оно установлено на false, или это именно то, что решил JOOQ.

Я пробовал:

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) { 
    ... 
} 

, но это не работает, так как возвращаемое значение функции field() не равно нулю, даже если значение поля. Я также пробовал

if (record.field(MY_TABLE.SOME_BOOLEAN).isNull()){ 
    ... 
} 

но это не является допустимым условием Java.

Заранее благодарен!

ответ

3

Что вы пытаетесь работать не будет:

if (record.field(MY_TABLE.SOME_BOOLEAN) != null) { } 

Record.field() возвратит Field ссылку. Идея состоит в том, что ваша запись не может быть создана с MY_TABLE, но она может содержать столбец SOME_BOOLEAN, Record.field() вернет столбец SOME_BOOLEAN из записи.

Что вы ищете просто:

if (record.get(MY_TABLE.SOME_BOOLEAN) != null) { } 

Обратите внимание, что jOOQ не имеет никакого способа отличить, был ли на самом деле SOME_BOOLEAN столбец NULL в вашей базе данных, или если LEFT JOIN не возвратил строку. Именно так работает SQL. Если вы хотите, чтобы проверить, действительно ли ваш LEFT JOIN нашел ребенок строку, вы можете проверить значение null в NOT NULL колонки, например, в качестве первичного ключа:

if (record.get(MY_TABLE.ID) != null) { } 

 Смежные вопросы

  • Нет связанных вопросов^_^