有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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) 个答案

  1. # 1 楼答案

    如果必须使用@SQLDelete,恐怕没有解决方案

    我已经成功地用spring数据jpa+hibernate实现了一个软删除机制,并映射了超类,而不使用@SQLDelete,但它需要创建自己的BaseRepository实现来覆盖SimpleParepositoryImpl,然后用软删除实现替换delete方法

    spring数据文档here详细描述了实现这一点的方法