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

}

我怀疑这与cascade删除动作有关,该动作以某种方式绕过冬眠的envers。我如何才能创建儿童对象的审核表中的条目,同时确保所有孩子在删除引用父母时都会被数据库自动删除?

有帮助吗?

解决方案

您正在使用@ondelete 通过Hibernate生成DDL?如果是这样,Hibernate将在关系中添加“级联删除”,这意味着孩子的删除将在Hibernate外发生。因此,Envers(或Hibernate)无法访问此事件,无法对此采取行动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top