Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

364
Vistas
La consulta JOOQ "IN" arroja una excepción de puntero nulo

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:

  • verifique nulo antes de IN (no puedo hacerlo en mi caso, es una declaración de selección realmente grande)

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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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 )

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda