![](/img/trans.png)
[英]setting resultset of native query JPA to POJO throws Null pointer exception
[英]JOOQ "IN" Query throws null pointer exception
当我们尝试使用 Null 值获取数据时
field(TABLE_NAME.COLUMN_NAME.in(null))
使用 IN 子句获取空指针异常。
也许是因为这个。
@Override
public final Condition in(Collection<?> values) {
Field<?>[] fields = new Field[values.size()];
Iterator<?> it = values.iterator();
for (int i = 0; it.hasNext(); i++)
fields[i] = Tools.field(it.next(), this);
return in(fields);
}
在数据库中,我们可以在 IN 子句中提供 null。
jooq https://github.com/jOOQ/jOOQ/issues/3867 中存在一个“无法修复”的问题
有一些替代方案:
因此,如果我想让这成为可能,是否还有其他解决方法。
PS:在类似的说明中,“eq”工作得很好:
@Override
public final Condition equal(Field<T> field) {
return compare(EQUALS, nullSafe(field, getDataType()));
}
编辑: 'field(TABLE_NAME.COLUMN_NAME.in(null))' 这里的 null 是一个集合。
您的示例代码无法编译:
TABLE_NAME.COLUMN_NAME.in(null)
这个in()
方法在 jOOQ 3.14 中有 5 个重载,因此,您不能将null
文字传递给in()
方法。 您的真实客户端代码可能正在使用这样的局部变量:
Collection<?> collection = null;
TABLE_NAME.COLUMN_NAME.in(collection)
在某些情况下,这应该与传递空集合(例如Collections.emptyList()
行为相同,但这似乎不是您想要的。 您可能希望在该集合中传递实际的null
值,您可以这样做:
TABLE_NAME.COLUMN_NAME.in(1, null, 2)
但你为什么要这样做? SQL 实现了三值逻辑,这意味着NULL
值在IN
谓词中没有影响,而它们在NOT IN
谓词中具有不直观的、几乎不需要的效果(整个谓词变为NULL
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.