我正在使用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。如何创建子对象的审计表中的条目,同时仍然确保在删除引用的父项时数据库会自动删除所有子项?
答案 0 :(得分:2)
您是否正在使用@OnDelete 和通过Hibernate生成DDL?如果是这样,Hibernate将在关系上添加“on cascade delete”,这意味着删除子节点将在Hibernate之外进行。因此,Envers(或Hibernate)将无法访问此事件,无法对此进行操作。