我在 JOOQ 中有一个查询,其中包含与另一个表的 LEFT OUTER JOIN。这是有意为之的,因为不能保证相应的记录会存在,在这种情况下我仍然想从以前的表中检索值,并为缺少的字段提供默认值。
但是,由于 getValue()
带有默认参数的函数已被弃用,我如何检查该字段是否包含 NULL 值?
使用字符串很简单,但是 boolean 值只返回为 false
,这意味着我无法检查它是否真的设置为 false,或者这只是 JOOQ 决定返回的内容。
我试过:
if (record.field(MY_TABLE.SOME_BOOLEAN) != null) {
...
}
但这不起作用,因为 field()
的返回值函数不为空,即使字段的值为空。我也试过
if (record.field(MY_TABLE.SOME_BOOLEAN).isNull()){
...
}
但这不是有效的 Java 条件。
提前致谢!
最佳答案
你正在尝试的是行不通的:
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
是否真的找到了子行,您可以检查 NOT NULL
列中的 null
值,例如作为主键:
if (record.get(MY_TABLE.ID) != null) { }
关于java - JOOQ 检查 Record 对象中的空字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062735/