我正在使用 Hibernate envers 来跟踪对数据库对象所做的所有更改。这些对象有时通过(单向)父子关系相关。因为我需要应该列出所有已删除对象的查询,所以我依靠 envers 上的审核表来标记已删除对象(*_aud 表中的 revtype 列)。但是,当父对象被删除时,这些条目似乎不会为我的任何子对象创建。
我的对象类如下所示:
@Entity
@Audited
public class MyClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, unique = false, length = 1024)
private String name;
// An object can have exactly one parent, but multiple children
@ManyToOne
@OnDelete(action = OnDeleteAction.CASCADE)
private MyClass parent;
}
我怀疑它与级联删除操作有关,该操作以某种方式绕过了 hibernate 状态。如何实现在创建子对象的审计表中的条目的同时仍然确保在删除引用的父对象时数据库自动删除所有子对象?
最佳答案
您是否使用@OnDelete并通过Hibernate生成DDL?如果是这样,Hibernate 将在关系上添加“级联删除”,这意味着子级的删除将在 Hibernate 外部进行。因此,Envers(或 Hibernate)将无法访问此事件,无法对此采取行动。
关于java - hibernate 恩弗斯 : No delete entry in audit table for cascading deletes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4591967/