由于最近正在做一个开源的微服务系统。采用spring cloud, spring boot, axon 等等来做。然后呢。ORM打算采用的是spring data jpa。然后再做系统的时候就考虑到了一个持久化逻辑删除的问题。那么问题来了。spring data jpa并不支持逻辑删除。在网上找了很多以后。发现有个同学是这样做的。自己写一个BaseDao然后BaseDao继承PagingAndSortingRepository 这个类。再自己对BaseDao写一个实现。把SimpleJpaRepository 代码复制过来。再将里面的查询语句进行修改。同时实现逻辑删除的代码。原文链接如下。
感兴趣的同学可以去自行研究一下。刚开始我也觉得。这就是我想要的。但是写了之后。一直报错。找不到自定义的那几个逻辑删除属性。原来是自己写的实现没有生效。这让我很忧伤啊。然后继续逛,看到一个这样的方案。
@Entity
@Table(name="demo")
@SQLDelete(sql = "update demo set deleted = 1 where id = ?")
@Where(clause = "deleted = 0")
public class Demo{
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="deleted")
private Integer deleted = 0;
private String userName;
@Override