最近我了解到有@Where
注释,我可以在我的@Entity
课程中成功使用它。看起来此过滤器将应用于每个查询。
当我试图将这个软删除的实体作为另一个@Entity中的集合元素时,我遇到了问题。
无法找到id为xx的SoftDeletedEntity(通过引用链...
现在我想尝试仅在SpringData repo的findAll()
方法上使用此@Where过滤器。我尝试了以下方法,但它没有用。
public interface MyEntity extends JpaRepository<MyEntity, Long> {
@Where(clause = "is_deleted = 'false'")
@Override
List<MyEntity> findAll();
}
有可能吗?
答案 0 :(得分:4)
如果您使用hibernate和@Where,那么您的问题就不容易解决(它被Hibernate过滤,而不是Spring数据)。 但您可以考虑采用另一种方法来使用spring数据的表达式语言进行软删除和查询:
@Override
@Query("select e from #{#entityName} e where e.deleteFlag=false")
public List<T> findAll();
//recycle bin
@Query("select e from #{#entityName} e where e.deleteFlag=true")
public List<T> recycleBin();
@Query("update #{#entityName} e set e.deleteFlag=true where e.id=?1")
@Modifying
public void softDelete(String id);
//#{#entityName} will be substituted by concrete entity name automatically.
像这样重写基础知识库。所有子存储库接口都具有软删除功能。