我有一个表 Stuff
定义为...
id, <fields>..., active
Active 是软删除标志,始终为 1
或 0
。从长远来看,这可能会消失,取而代之的是历史表格。
public interface StuffRepository extends JpaRepository<StuffEntity, Long> {}
在代码中,我们总是使用 Activity 记录。有什么方法可以让 Spring 始终将 active=1
条件附加到为此存储库生成的查询中?或者更理想地允许我扩展用于生成查询的语法?
我知道我可以在任何地方创建命名的 @queues
,但是我失去了生成查询的便利性。我还想避免使用“Activity ”方法污染接口(interface)。
如果这很重要,我将使用 Hibernate 4.2 作为我的 JPA 实现。
最佳答案
@Where(clause="is_active=1")
不是使用 spring data jpa 处理软删除的最佳方法。
首先,它只适用于 hibernate 工具。
其次,您永远无法使用 spring 数据获取软删除的实体。
我的解决方案是由 spring data 提供的。 #{#entityName}
表达式可用于通用存储库表示具体的实体类型名称。
代码会是这样的:
//Override CrudRepository or PagingAndSortingRepository's query method:
@Override
@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")
public List<T> recycleBin();
//Soft delete.
@Query("update #{#entityName} e set e.deleteFlag=true where e.id=?1")
@Modifying
public void softDelete(String id);
关于java - 使用 Spring JPA 处理软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323557/