Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

362
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda