java - hibernate 恩弗斯 : No delete entry in audit table for cascading deletes

标签 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 状态。如何实现在创建子对象的审计表中的条目的同时仍然确保在删除引用的父对象时数据库自动删除所有子对象?

最佳答案

您是否使用@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/

相关文章:

java - 在 DELPHI 中创建一个枚举

java - 合并集合图

java - 云应用程序使用多个架构还是单个架构?

java - org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException

NHibernate 映射按代码级联 All-Delete-Orphans

cocoa - 如何正确级联删除Core Data中的托管对象?

java - 为什么 Java 中缺少友元指令?

java - 从 docx4j api 的 .docx 文件中提取图像和超链接

hibernate - 如何注释 id 使其在没有 SEQUENCE 表的情况下自动递增?

java - 在我的 Play 应用程序中使用 Ebean/JPA,如何删除 OneToOne 关系中的对象?