Saltar al contenido

Spring data JPA y parámetros que pueden ser null

Esta es la respuesta más correcta que te podemos compartir, pero obsérvala detenidamente y analiza si es compatible a tu trabajo.

Solución:

Tienes razón.

Se ha hecho una solicitud para apoyar un mejor manejo de null parámetros https://jira.spring.io/browse/DATAJPA-121

En su caso, le aconsejaría que escriba la implementación de su repositorio y use un CriteriaQuery personalizado para manejar su caso.

También puede usar la anotación @Query con el is null sintaxis:

@Query("[...] where :parameter is null"
public List getSomethingWithNullParameter();

EDITAR

Desde Spring data jpa 2.0, Spring ahora admite la anotación @Nullable. Esto puede ser útil para manejar null parámetros pasados.

De la documentación:

@Nullable: para usarse en un parámetro o valor de retorno que puede ser null.

Parece que Query by Example podría ser lo que necesita.

Query by Example es una nueva función en Spring Data (desde la versión Hopper, que salió en abril de 2016), que permite crear consultas dinámicas simples con un código como este

Person person = new Person();                          
person.setFirstname("Dave");                           

ExampleMatcher matcher = ExampleMatcher.matching()     
  .withIncludeNullValues();                        

Example example = Example.of(person, matcher);

personRepository.count(example);
personRepository.findOne(example);
personRepository.findAll(example);

Métodos count/findOne/findAll que toman una instancia de org.springframework.data.domain.Example como parámetro (y algunos de ellos también toman parámetros de clasificación/paginación) provienen de org.springframework.data.repository.query.QueryByExampleExecutor interfaz, que se amplía con org.springframework.data.jpa.repository.JpaRepository interfaz.

En resumen, todos JpaRepository las instancias ahora tienen estos métodos.

encontré algo… si pones el parámetro en el método jpa como este

@Param("value") String value,

entonces puede ser null y en la consulta tendrás esta condición:

(table.value = :value OR :value IS NULL)

si el valor es null volverá automáticamente true y si no es nullbuscará ese valor en la tabla.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *