数据库
首页 > 数据库> > mysql-使用Hibernate @SQLDelete对所有实体进行软删除

mysql-使用Hibernate @SQLDelete对所有实体进行软删除

作者:互联网

我们有一个相当复杂的数据模型,并且在MySQL之上使用Hibernate和Spring Data JPA.我们有一个基类,所有域对象都可以扩展以最小化样板代码.我希望能够仅使用此类在所有域对象中添加软删除功能.但是,@ SQLDelete在子句中需要表名称:

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

有人知道一种概括SQLDelete语句并允许扩展域对象填充其自己的表名的方法吗?

解决方法:

如果使用hibernate和@SQLDelete,则无法轻松解决您的问题.但是您可以考虑使用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.

像这样重写基础存储库.所有子存储库接口都将具有软删除功能.

标签:spring-data-jpa,spring-data,hibernate,mysql
来源: https://codeday.me/bug/20191201/2084343.html