2

Hibernate Enversを使用して、データベースへのすべての変更をログに記録しています。別のエンティティとManyToOneの関係にあるエンティティを追加すると、片側のエンティティにも改訂が加えられていることに気付きました。外部キーは関係の多側にあるため、多側にエンティティを追加する場合、マッピングの片側のエンティティは更新されません。ただし、マッピングの片側のエンティティにはまだリビジョンが挿入されていました。

ここで提案されている方法を使用して、OneToManyマッピングの監査を無効にしました: Hibernate EnVersの@NotAuditedとRelationTargetAuditMode.NOT_AUDITEDの違いは何ですか?

この回答は、リレーションを取得すると、常に現在のエンティティが返されることを示しています。古いリビジョンのマッピングの片側の情報を取得できないということですか?

この時点では、監査されたログをどのように照会するかはわかりませんが、テーブル構造から、いつでもエンティティの現在の状態を取得できるようです。

OneToManyマッピングを監査しないことを選択したとすると、次のテーブル構造はどうなりますか?

リビジョン1のOneSideEntityOneSideEntityの監査リビジョン5のOneSideEntity

ManySideEntity1の監査リビジョン2のManySideEntity1リビジョン3のManySideEntity1リビジョン4のManySideEntity1

ManySideEntity2の監査リビジョン6のManySideEntity2リビジョン7のManySideEntity2リビジョン8のManySideEntity2リビジョン9のManySideEntity2

両方のManySideEntityオブジェクトはOneSideEntityを指します。

リビジョン5で1対多のマッピング([ManySideEntity1]または[ManySideEntity1、ManySideEntity2])を照会すると、どのエンティティが取得されますか。

上記の質問は私が後者を取得することを示唆していますが、リビジョン5では最初のものを好みます。ここで何かが足りませんか?

また、特定のタイムスタンプについて、そのタイムスタンプよりも小さいすべてのリビジョンを見つけることができると思います。これにより、AUDITINGログに正確なテーブル情報が確実に記録されます。答えが[ManySideEntity1、ManySideEntity2]の場合、なぜ情報が失われるのですか?

4

1 に答える 1

3

org.hibernate.envers.revision_on_collection_change多分あなたはに設定したいですfalseか?( http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#d5e3937を参照)

双方向の 1 対多の関係で一方の関係を変更すると、両側が変更されるかどうかは議論の余地があり、ユースケースによって異なります。DB には変更はありませんが、一方で Java オブジェクトが変更されます (コレクションに新しい要素があります)。

于 2013-03-15T12:22:29.970 に答える