Hibernate Envers:审计表中没有用于级联删除的删除条目

时间:2011-01-04 09:03:47

标签: java hibernate cascade hibernate-envers cascading-deletes

我正在使用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 envers。如何创建子对象的审计表中的条目,同时仍然确保在删除引用的父项时数据库会自动删除所有子项?

1 个答案:

答案 0 :(得分:2)

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