gpt4 book ai didi

hibernate - 如何在Spring Data的findAll()方法中过滤软删除项?

转载 作者:行者123 更新时间:2023-12-02 04:07:23 24 4
gpt4 key购买 nike

最近我了解到有 @Where 注释,并且我可以在我的 @Entity 类上成功使用它。看起来这个过滤器将应用于每个查询。当我尝试将此软删除实体作为另一个 @Entity 中的集合元素时,我遇到了问题。

Unable to find SoftDeletedEntity with id xx (through reference chain ...

现在我想尝试仅在 SpringData 存储库的 findAll() 方法上使用这个 @Where 过滤器。我尝试了以下方法,但没有成功。

    public interface MyEntity extends JpaRepository<MyEntity, Long> {

@Where(clause = "is_deleted = 'false'")
@Override
List<MyEntity> findAll();
}

有可能吗?

最佳答案

如果您使用 hibernate 和 @Where,那么您的问题没有简单的解决方案(它是由 Hibernate 过滤的,而不是 spring 数据过滤的)。但是您可以考虑另一种方法来使用 Spring Data 的表达式语言进行软删除和查询:

@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.

像这样重写基础存储库。所有子存储库接口(interface)都将具有软删除能力。

关于hibernate - 如何在Spring Data的findAll()方法中过滤软删除项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38850588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com