2011-06-12 24 views
10

Estoy usando JPA namedQuery para seleccionar datos de DB.¿Cómo consultar una columna cuyo valor es nulo en JPA?

@NamedQuery(name = "Concept.findByRefTableNull", query = "SELECT c FROM Concept c WHERE c.conceptName = :conceptName and c.refTable = :refTable"), 

/// 
List<Concept> attributeList 
       = em.createNamedQuery("Concept.findByRefTableNull") 
       .setParameter("conceptName", "student"). 
       setParameter("refTable", null). 
       getResultList(); 

     System.out.println(attributeList.size()); //return 0 

El tamaño de lista es 0, pero estoy seguro de que debería tener registros. La razón es la refTable. ¿Cómo consultar una columna cuyo valor es nulo en JPA?

Gracias.

Respuesta

25

acaba de cambiar su consulta a

@NamedQuery(name = "Concept.findByRefTableNull", query = "SELECT c FROM Concept c WHERE c.conceptName = :conceptName and c.refTable IS NULL"), 
0

evitaría por completo Consultas - hace desaparecer prácticamente el sentido de la persistencia-abstracción. Cree consultas dinámicas a través del Criteria API en su lugar, esto garantizará la portabilidad Y podrá cambiar bases de datos hasta cierto punto sin mucha molestia

+8

Tener consultas JPQL sigue siendo una capa de abstracción y le permite cambiar la base de datos y también al usar criterios. – noone

0

No estoy seguro de si esto es solo una característica de Spring Data JPA pero solo escribo un método en la interfaz del repositorio de la forma findByFieldName (campo Tipo) donde fieldName es el nombre de la columna que necesito hacer una comprobación nula. Luego uso este método y paso nulo como parámetro.

+0

Eso no funcionará cuando tu tipo de datos de argumento sea primitivo. – rsman

Cuestiones relacionadas