我有一个抽象基类A
,它是@MappedSuperClass
。
此外,还有几个实体类从类A
扩展而来。类A
包含名为STATUS
的属性,表示是否删除记录。
@MappedSuperclass
public abstract class A {
@Id
private Long id;
@Column(nullable = false)
private boolean status = true;
}
我想要的是能够使用A
注释对类@SQLDelete
中的所有子类执行软删除。例如,我有一个类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
中写一次。在那里它将更新该记录的状态。
这可能吗?如果是的话,我该如何实现呢?
提前致谢。
答案 0 :(得分:0)
如果你必须使用@SQLDelete,那么我担心没有解决方案。
我设法使用spring-data-jpa + hibernate实现了一个软删除机制,并在不使用@SQLDelete的情况下映射了超类,但它需要创建自己的BaseRepository实现来覆盖SimpleJpaRepositoryImpl,然后替换使用softdelete实现删除方法。
在spring-data docs here中详细描述了这样做的方法。