Есть ли хороший способ обработки мягкого удаления в Spring Data JDBC?
В Spring Data JPA мы можем либо добавить @Where(clause="is_active=1")
аннотацию, либо расширить CrudRepository
или PagingAndSortingRepository
.
Поскольку Spring Data JDBC не поддерживает SPEL в запросах, мы не можем написать их в общем виде следующим образом:
@NoRepositoryBean
public interface SoftDeleteCrudRepository<T extends BasicEntity, ID extends
Long> extends CrudRepository<T, ID> {
//Override CrudRepository or PagingAndSortingRepository's query method:
@Override
@Transactional(readOnly = true)
@Query("select e from #{#entityName} e where e.deleteFlag=false")
public List<T> findAll();
//Look up deleted entities
@Query("select e from #{#entityName} e where e.deleteFlag=true")
@Transactional(readOnly = true)
public List<T> findAllDeleted();
//Soft delete.
@Query("update #{#entityName} e set e.deleteFlag=true where e.id=?1")
@Transactional
@Modifying
public void softDelete(String id);
...
}
Таким образом, расширение CrudRepository
или PagingAndSortingRepository
означает написание одинаковых запросов для каждогохранилище для каждой сущности / таблицы?Как
Repository1
@Override
@Transactional(readOnly = true)
@Query("select id, name, value, deleteFlag from table1 e where e.deleteFlag=false")
public List<T> findAll();
....
Repository2
@Override
@Transactional(readOnly = true)
@Query("select id, name, value, deleteFlag from table2 e where e.deleteFlag=false")
public List<T> findAll();
....
Спасибо за ответ заранее!