1

我正在使用 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;

}

我怀疑它与以某种方式绕过休眠环境的级联删除操作有关。如何在创建子对象的审计表中的条目的同时确保在删除引用的父对象时所有子对象都被数据库自动删除?

4

1 回答 1

3

您是否使用 @OnDelete通过 Hibernate 生成 DDL?如果是这样,Hibernate 将在关系上添加一个“级联删除”,这意味着删除子节点将在 Hibernate 之外进行。因此,Envers(或 Hibernate)将无法访问此事件,无法对此采取行动。

于 2011-01-04T15:12:46.027 回答