java - 在 Hibernate 中使用@MappedSuperClass 进行软删除

标签 java hibernate jpa soft-delete

我有一个抽象基类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/

相关文章:

java - 导入和反序列化时对象显示 null

oracle - 使用 ColdFusion 11/Oracle 12c 生成 Hibernate 配置时出错

java - 如何解决无法执行语句; SQL [不适用];约束[patient_id];嵌套异常是 org.hibernate.exception.ConstraintViolationException

java - 如何在 Netbeans 中使用 JSF 1.2 和 JPA?

java - 用java字符串中的th替换所有td的标签

java - 无法将 TableRowSorter 添加到 SwingWorker 生成的 JTable 中

java - HttpServletRequest.getRequestURL() 是否可欺骗?

hibernate - Hibernate 3.2.6.ga 中的 LocalDateTime (Joda-Time) 映射

java - 以分层与平面方式向 Spring Data JPA Repository 添加一个通用查询

java - JPA:如何在运行时指定类对应的表名?