Estoy tratando de crear una API para recuperar registros de una base de datos con Spring Boot Data JDBC.
Digamos que tengo la siguiente entidad:
record Customer(@Id Long id, String name) {}y el siguiente repositorio:
public interface CustomerRepository extends CrudRepository<Customer, Long> { } Luego customerRepository.findAll() devuelve ordenadamente una List<Customer> que contiene todos los clientes, y repository.findById(23) encuentra con éxito al cliente con id #23, siempre que dicho cliente realmente exista.
Ahora la tabla de la base de datos subyacente tiene una columna adicional isDisabled , que contiene 0 o 1 . Quiero que mi API excluya todos los registros en los que el cliente esté deshabilitado.
Podría crear consultas en las que excluya manualmente esos registros, así:
public interface CustomerRepository extends CrudRepository<Customer, Long> { @Query(""" SELECT id, name FROM Customers WHERE id = :id AND isDisabled = 0 """) @Override public Optional<Customer> findById(@Param("id") String id); } Esto funciona, pero el problema es que tengo que hacer esto para todas las consultas de recuperación de bases de datos, incluidas findAll , findByName , etc.
¿Hay alguna manera de filtrar de alguna manera estos registros para todas las consultas de recuperación a la vez?
Por ejemplo, supongamos que tenemos la siguiente tabla:
| identificación | nombre | está desactivado |
|---|---|---|
| 1 | Alicia | 0 |
| 2 | Bretaña | 1 |
| 3 | carolino | 0 |
| 4 | dakota | 0 |
entonces findAll() devolvería
[ Customer(1, Alice), Customer(3, Caroline), Customer(4, Dakota) ] Del mismo modo, findById(2) devolvería un Optional vacío.
Parece que está tratando de implementar un tipo de funcionalidad de 'eliminación temporal'. Puede agregar la siguiente anotación a su entidad que hará lo que está pidiendo:
@Where(clause = "isDisabled=0")Consulte este enlace para obtener más información sobre la eliminación temporal.