【发布时间】:2018-07-05 05:43:51
【问题描述】:
我有存档表,我不想被删除,所以如何使用 jpa 或 hibernate 来防止删除表(删除方法必须抛出错误),或者在删除时实际执行更新(状态 = 已删除) .是否有任何注释或任何技术可以做到这一点?
【问题讨论】:
-
在数据库中使用触发器会很容易。
标签: spring postgresql hibernate jpa
我有存档表,我不想被删除,所以如何使用 jpa 或 hibernate 来防止删除表(删除方法必须抛出错误),或者在删除时实际执行更新(状态 = 已删除) .是否有任何注释或任何技术可以做到这一点?
【问题讨论】:
标签: spring postgresql hibernate jpa
您可以使用实体回调@PreRemove 并抛出运行时异常。
https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html
【讨论】:
@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
}
【讨论】: