Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

361
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!