Kir*_*ill 2 hibernate spring-data spring-data-jpa
最近我了解到有@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();
}
Run Code Online (Sandbox Code Playgroud)
有可能吗?
如果您使用 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.
Run Code Online (Sandbox Code Playgroud)
像这样重写基础存储库。所有子存储库接口都将具有软删除能力。
| 归档时间: |
|
| 查看次数: |
3360 次 |
| 最近记录: |