Foros del Web » Programación para mayores de 30 ;) » Java »

Problema en consulta JPQL con IS NULL en JPA

Estas en el tema de Problema en consulta JPQL con IS NULL en JPA en el foro de Java en Foros del Web. Hola tengo un problema al hacer una consulta en JQPL de JPA, utilizo EclipseLink 2.3.2 Tengo una entidad Actividad, de la cual hago las consultas ...
  #1 (permalink)  
Antiguo 07/11/2012, 15:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 106
Antigüedad: 14 años, 11 meses
Puntos: 1
Problema en consulta JPQL con IS NULL en JPA

Hola tengo un problema al hacer una consulta en JQPL de JPA, utilizo EclipseLink 2.3.2

Tengo una entidad Actividad, de la cual hago las consultas (SELECT a FROM Actividad ...) y tiene una relacion OneToOne a la entidad Usuario
tengo varias condiciones en el where y casi todas sirven bien excepto cuando manejo IS NULL

tengo la siguiente condicion

Código JPQL:
Ver original
  1. ... and ( a.usuario IS NULL or ( a.usuario.nombre LIKE :nombre))...

la consulta me devuelve todos los valores cuando usuario no es nulo.

Si tengo en la tabla actividad:

Código:
id,usuario,...
1,usuario1
2,usuario2
3, NULL
me devuelve 1 y 2 (si cumplen las otras condiciones), pero jamas me regresan los valores nulos y quiero que tambien me regrese cualquie valor NULO

intente cambiar toda esa linea por (solo para probar si IS NULL servia)

Código jpql:
Ver original
  1. and a.usuario IS NULL

y efectivamente me devolvio todos los valores nulos, el gran pero es que quiero poder preguntar por su nombre

¿que puedo hacer?


muchas gracias por su ayuda.
__________________
VivaMéxico
  #2 (permalink)  
Antiguo 08/11/2012, 09:49
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 12 años, 7 meses
Puntos: 29
Respuesta: Problema en consulta JPQL con IS NULL en JPA

No sé si lo he entendido bien, pero lo que quieres es preguntar por el nombre al objeto nulo que te devuelve?
  #3 (permalink)  
Antiguo 08/11/2012, 11:33
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Problema en consulta JPQL con IS NULL en JPA

Menudo cristo, edito pq me he liado.

¿Estás diciendo q con las dos condiciones solo te devuelve los dos primeros resultados y que con la otra te devuelve los resultados null?

Intenta hacer un select union a ver q tal.

Select condicion A UNION select condicion B
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 08/11/2012, 16:30
 
Fecha de Ingreso: mayo-2009
Mensajes: 106
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Problema en consulta JPQL con IS NULL en JPA

Cita:
Iniciado por Fuzzylog Ver Mensaje
¿Estás diciendo q con las dos condiciones solo te devuelve los dos primeros resultados y que con la otra te devuelve los resultados null?
Si efectivamente solo regresando los dos primero cuando deberia regresar los tres (en ese ejemplo)

Probe con Union sin suerte, primero en mi proyecto tal cual, pero me dio un error

Código:
Syntax error parsing the query syntax error at [UNION]
Lei y creo que Union esta desde la version 2.4 de Eclipselink, descargue la nueva libreria, y me dio otro error, (que parece ser que ya ejecuta el Union )

Código:
MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION
,
y ahora es un error de mysql, que no comprende el codigo que jpa genera

¿alguna otra idea?

¿creen que sea un bug de Eclipselink? o sea algo del query, ya probe quitando todas las otras condiciones, nada
__________________
VivaMéxico
  #5 (permalink)  
Antiguo 09/11/2012, 01:12
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Problema en consulta JPQL con IS NULL en JPA

Si estás usando hibernate éste no soporta UNION

Select a.usuario from Actividad a where a.usuario in (select a2.usuario from Actividad a2 where -- condicion null aqui --) OR a.usuario in (select a3.usuario from Actividad a3 where -- condicion usuario.nombre aqui --);

Eso te debería tirar
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 09/11/2012, 16:30
 
Fecha de Ingreso: mayo-2009
Mensajes: 106
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Problema en consulta JPQL con IS NULL en JPA

USO EclipseLink 2.4.1

cambie
Código:
Select a.usuario from Actividad a...
por
Select a from Actividad a
ya que quiero Actividades en la consulta.

Despues probe solo con el query que me escribiste y tiene el mismo comportamiento, me devuelve los nombre que se parecen (LIKE) a lo que le envio, pero no regresa los nullos.

despues probee solo la primera subconsulta (la del null)
Código:

Select a from Actividad a where a.usuario in (select a2.usuario from Actividad a2 where a2.usuario IS NULL)
y me devuelve 0 valores, despues, solo por probar cambie la condicion a is not null


Código:
Select a from Actividad a where a.usuario in (select a2.usuario from Actividad a2 where a2.usuario IS NO NULL)
y me devuelve todos los valores de mi tabla que no son nulos (89 me parece)

con esto parece ser que el IN esta correcto, pero no funciona el Is NULL


que puedo hacer? he pensado en usar una sql nativa, ya que he conseguido un codigo que me sirve, pero tengo como otras 5 o 6 condiciones que deben cumplirse y la complejidad del query subiria muchisimo asi que no creo que sea una opcion viable


otra cosa, no se si sea porque Actividad tiene una relacion UnoaUno con Usuario

@OneToOne
private Usuario usuario;
__________________
VivaMéxico

Última edición por domanion; 09/11/2012 a las 16:32 Razón: add info
  #7 (permalink)  
Antiguo 10/11/2012, 07:20
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Problema en consulta JPQL con IS NULL en JPA

Igual para que te funcione la primera condicion deberia ser tal que así

Select a from Actividad a where a in (select a2 from Actividad a2 where a2.usuario IS NULL)

Y la segunda según dices está bien...

asi que quedaría algo como:

Select a from Actividad a where a in ( select a1 from Actividad a1 where a1.usuario IS NULL ) OR a.usuario in ( select a2.usuario from Actividad a2 where a2.usuario.nombre LIKE :nombre );

Donde tienes que hacer un replace con el setParameter para poner el nombre del usuario.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: consulta-mysql, jpa, jpql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:14.