在Hibernate中使用@MappedSuperClass进行java软删除
我有一个抽象基类A
,它是@MappedSuperClass
。
此外,还有几个实体类从类A
扩展而来。类A
包含一个名为STATUS
的属性,该属性表示记录是否被删除
@MappedSuperclass
public abstract class A {
@Id
private Long id;
@Column(nullable = false)
private boolean status = true;
}
我想要的是能够对带有@SQLDelete
注释的类A
中的所有子类执行软删除。例如,我有一个类B extends A
,每当我在类B
上调用delete时,我都希望它更新数据库中该记录的状态
@Entity
@Table(name = "TempTable")
@SQLDelete(sql = "update TempTable set STATUS = 0 where ID = ?") //Basically, I don't want
//to write this in every
//class. Instead write
//it to class A once.
@Where(clause = "STATUS = 1")
public class B extends A {
private String alpha;
}
现在我可以软删除,但为了实现这一点,我必须在每个类中编写@SQLDelete
注释。我不想重复,只想在基类A
中写一次。在那里,它将更新该记录的状态
这可能吗?如果是,我如何实现
提前谢谢
# 1 楼答案
如果必须使用@SQLDelete,恐怕没有解决方案
我已经成功地用spring数据jpa+hibernate实现了一个软删除机制,并映射了超类,而不使用@SQLDelete,但它需要创建自己的BaseRepository实现来覆盖SimpleParepositoryImpl,然后用软删除实现替换delete方法
spring数据文档here详细描述了实现这一点的方法