Simple example of how to use custom JPA repository implementation for soft deletes functionality.
@IdClass
BackendIdConverter
for every association entity so you can use Spring Data REST to manipulate entity
http GET localhost:8080/roleUsers/1_1
http DELETE localhost:8080/roleUsers/1_1
// TODO http PATCH localhost:8080/roleUsers/1_1 otherField="field"
@UniqueConstraint
inside @Table
to define unique constraints (MUST MATCH DATABASE SCHEMA)
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "single" }) })
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "single1" }), @UniqueConstraint(columnNames = { "single2" }) })
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "double1", "double2" }) })
CustomRepositoryRestConfigurerAdapter
to register the BackendIdConverters and expose the ID
fields for all entitiesPOST
methodstoString()
method
@ToString(exclude = { "roles" })
long countActive();
T findOneActive(ID id);
boolean existsActive(ID id);
Iterable<T> findAllActive();
Iterable<T> findAllActive(Sort sort);
Page<T> findAllActive(Pageable pageable);
Iterable<T> findAllActive(Iterable<ID> ids);
void softDeleteAll();
void softDelete(ID id);
void softDelete(T entity);
void softDelete(Iterable<? extends T> entities);
void scheduleSoftDelete(ID id, LocalDateTime localDateTime);
void scheduleSoftDelete(T entity, LocalDateTime localDateTime);
//
//
In order to use this, we first must create our CustomJpaRepositoryFactoryBean and enable that in our main class using:
@EnableJpaRepositories(repositoryFactoryBeanClass = CustomJpaRepositoryFactoryBean.class)
This returns our custom SoftDeletesRepositoryImpl instead of the default SimpleJpaRepository.
There's a BaseEntity which all of our entities must extend, that contains the necessary field to enable us to use this functionality.
Now for every repository interface, instead of extending the JpaRepository we extend our SoftDeletesRepository (UserRepository example).
Just clone or download the repo and import it as an existing maven project.
You'll also need to set up Project Lombok or if you don't want to use this library you can remove the associated annotations from the code and write the getters, setters, constructors, etc. by yourself.
This project is licensed under the MIT License - see the LICENSE file for details