如何使用jpa或hibernate来防止删除表

时间:2018-07-05 05:43:52

标签: spring postgresql hibernate jpa

我有不想删除的存档表,因此如何使用jpa或休眠模式来防止删除表(删除方法必须抛出错误),或者在删除时确实进行了更新(状态=已删除) 。是否有任何注释或技术可以这样做?

2 个答案:

答案 0 :(得分:1)

您可以使用实体回调@PreRemove并引发运行时异常。

https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html

答案 1 :(得分:0)

@SqlDelete注释使您可以覆盖Hibernate执行的默认DELETE语句,因此我们用UPDATE语句代替。因此,删除实体最终将把已删除的列更新为true

@SQLDelete(sql = "UPDATE tag SET deleted = true WHERE id = ?")

@MappedSuperclass
public abstract class BaseEntity {

    private boolean deleted;
}

@Entity(name = "Tag")
@Table(name = "tag")
@SQLDelete(sql =
    "UPDATE tag " +
    "SET deleted = true " +
    "WHERE id = ?")
public class Tag extends BaseEntity {

    @Id
    private String id;

    //Getters and setters omitted for brevity
}