Cuando intentamos obtener datos con valores nulos
field(TABLE_NAME.COLUMN_NAME.in(null))
con la cláusula IN obteniendo una excepción de puntero nulo.
Tal vez por esto.
@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); }En la base de datos, podemos proporcionar un valor nulo en la cláusula IN.
Hay un problema existente de "no solucionará" en jooq https://github.com/jOOQ/jOOQ/issues/3867
Hay algunas alternativas:
Entonces, si quiero que esto sea posible, ¿hay alguna otra solución?
PD: en una nota similar, "eq" funciona perfectamente bien:
@Override public final Condition equal(Field<T> field) { return compare(EQUALS, nullSafe(field, getDataType())); }Editar: 'field(TABLE_NAME.COLUMN_NAME.in(null))' aquí null es una colección.
Su código de ejemplo no se compila:
TABLE_NAME.COLUMN_NAME.in(null) Hay 5 sobrecargas de este método in in() en jOOQ 3.14 y, como tal, no puede pasar el literal null al método in() . Su código de cliente real puede estar usando una variable local como esta:
Collection<?> collection = null; TABLE_NAME.COLUMN_NAME.in(collection) Puede haber un caso en el que esto debería comportarse igual que pasar una colección vacía, como Collections.emptyList() , pero esto no es lo que parece querer. Probablemente desee pasar valores null reales dentro de esa colección, lo cual puede hacer:
TABLE_NAME.COLUMN_NAME.in(1, null, 2) Pero ¿por qué lo harías? SQL implementa una lógica de tres valores , lo que significa que los valores NULL no tienen efecto en los predicados IN , mientras que tienen un efecto poco intuitivo y difícilmente deseado en los predicados NOT IN (el predicado completo se convierte en NULL )