...
| Bloque de código | ||
|---|---|---|
| ||
@Autowired
private final UsuarioRepository usuarioRepo;
Usuario usuario = usuarioRepo.findByLogin("asdf"); |
Tipo Optional
En versiones recientes de JpaRepository se ha introducido el tipo Optional. Este es un tipo contenedor, que puede contener o no un valor no nulo. Si tiene un valor, el método isPresent() devolverá true, y el método get() devolverá el valor.
Incluye otros métodos adicionales que dependen de la presencia o ausencia del valor, como orElse() (devuelve lo que indiquemos si no está presente), o ifPresent() (ejecuta un bloque de código si el valor está presente).
Podemos consultar su documentación para ver la especificación completa del tipo Optional.
Algunos ejemplos de casos de uso podrían ser los siguientes:
Si no se encuentra la entidad, devolvemos un objeto del mismo tipo con los valores por defecto:
Bloque de código language java Foo foo = repository.findById(id) .orElse(new Foo());O podemos indicar que se devuelva null:
Bloque de código language java Foo foo = repository.findById(id) .orElse(null);Podemos indicar que si no se encuentra el valor, se lance una excepción:
Bloque de código language java return repository.findById(id) .orElseThrow(() -> new EntityNotFoundException(id));Si queremos personalizar el proceso a seguir según si se encuentra o no la entidad:
Bloque de código language java Optional<Foo> fooOptional = fooRepository.findById(id); if (fooOptional.isPresent()) { Foo foo = fooOptional.get(); // processing with foo ... } else { // alternative processing.... }
Paginación y reordenación
...