2012-01-05 151 views
3

我们有一个相当复杂的数据模型,并在MySQL上使用Hibernate和Spring Data JPA。我们有一个基类,所有域对象扩展到最小化锅炉板代码。我希望能够仅使用此类在所有域对象中添加软删除功能。然而,@SQLDelete要求子句中的表名:使用Hibernate @SQLDelete跨所有实体进行软删除

@SQLDelete(sql="UPDATE (table_name) SET deleted = '1' WHERE id = ?") 
@Where(clause="deleted <> '1'") 

有谁知道的方式来概括SQLDELETE声明,并允许扩展域对象来填充自己的表名?

+0

我们将在我们自己的AbstractAudible版本中使用它,它扩展了Spring Data的Persistable。 – ilana 2012-01-09 19:27:06

回答

0

看一看我的回答here,其中描述了如何实现这一点,如果你使用Hibernate和@SQLDelete,没有简单的解决您的问题用DeleteEventListener

1

。但您可以考虑另一种使用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. 

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

+0

它是否仍然适用于新的弹簧数据版本? – agodinhost 2017-12-10 16:37:48