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 は関係に「on cascade delete」を追加します。つまり、子の削除は Hibernate の外部で行われます。そのため、Envers (または Hibernate) はこのイベントにアクセスできず、対応できません。

于 2011-01-04T15:12:46.027 に答える