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.