我有一个抽象基类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
中写一次。在那里它将更新该记录的状态。
这可能吗?如果是,我该如何实现?
提前致谢。
最佳答案
如果一定要用@SQLDelete,恐怕就没有办法了。
我已经成功地使用 spring-data-jpa + hibernate 和映射的父类(super class)实现了一个软删除机制而不使用@SQLDelete,但是它需要创建你自己的 BaseRepository 实现来覆盖 SimpleJpaRepositoryImpl,然后替换 delete 方法与您的软删除实现。
执行此操作的方法在 spring-data 文档中有详细描述,here .
关于java - 在 Hibernate 中使用@MappedSuperClass 进行软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40928103/