我在JOOQ中有一个查询,它包含一个LEFT OUTER JOIN和另一个表。这是故意的,因为无法保证会存在相应的记录,在这种情况下,我仍然希望从前一个表中检索值,并提供缺省字段的缺失字段。
但是,由于不推荐使用带有默认参数的getValue()
函数,如何检查该字段是否包含NULL值?
使用字符串很容易,但布尔值只返回false
,这意味着我无法检查它是否真的被设置为false,或者它只是JOOQ决定返回的内容。
我试过了:
if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {
...
}
但这不起作用,因为field()
函数的返回值不为null,即使字段的值为。我也试过了
if (record.field(MY_TABLE.SOME_BOOLEAN).isNull()){
...
}
但这不是有效的Java条件。
提前致谢!
答案 0 :(得分:5)
你正在尝试的东西不起作用:
if (record.field(MY_TABLE.SOME_BOOLEAN) != null) { }
Record.field()
将返回Field
引用。我们的想法是,您的记录可能尚未从MY_TABLE
创建,但可能仍包含SOME_BOOLEAN
列,Record.field()
将从记录中返回SOME_BOOLEAN
列。< / p>
您正在寻找的只是:
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) { }