在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();
....
感谢您提前回复!
deleted_ind = true
而不是硬删除实体或仅检索deleted_ind = false
的实体来删除实体是可行的,对于findBy****
和findAll
方法。 - Dexter