Enversによって監査され、1つのコレクションを含むエンティティを指定します。そのdocumentation Envers 1としてHibernate Enver:@AuditJoinTable行が見つからない
エンティティA
@Audited
public class A{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
....
@OneToMany
@JoinColumn(name = "a_id")
@AuditJoinTable(name = "A_B_AUDIT"
,inverseJoinColumns = @JoinColumn(name = "a"))
private List<B> bs;
....
}
エンティティB
@Audited
public class B{
@Id
private int id;
....
@Column(name = "a_id")
private int aId;
@ManyToOne
@JoinColumn(name = "a_id", insertable = false, updatable = false)
private A a;
}
これらAuditJoinTables(A_B_AUDIT)の付加および欠失の監査情報を格納します。しかし残念ながら、これは動作しておらず、テーブル内の行が欠落しています。
私は私のプロジェクト、次の表を実行し作成されます:
A_AUDIT
B_AUDIT
A_B_AUDIT
を私はオブジェクトとBのオブジェクトを永続化する別々のコントローラをしました。 AとAでBを保存しようとすると、audit_table(A_B_AUDIT)は更新されませんが、B_AUDITの更新版が更新されます。
私はここで何が不足しているか教えていただけますか?
ありがとうございました!
休止Enverバージョン:5.1.4.Final
私はmasterと5.1.4の両方でテストしました。問題の再現ができないため、関係の両側の値をどのように設定するかが非常に具体的でなければなりません。エンティティを作成して永続化する前にエンティティを関連付ける場所にコードを含めることができますか? – Naros
こんにちは@Naros、私はそれらの両方のためのコントローラを分離していますし、マッピング(Hibernate)マッピングに基づいて、私は関連付けを選んでいます。 –
別々のトランザクションで 'B'と' A'を永続させているように聞こえます。あなたがそれらの間に構築している唯一の関連は、識別子が 'A'で' B#aId'です。もしそれが真で、明示的に 'B'を' A'のリストに追加していないのであれば、ジョインテーブルに値を置かないでしまいます。これは永続性がどのように働くかではありません。必要な属性をすべて保持していることを確認する必要があります。そうしないと、部分的な状態になり、Enversは監査履歴を正しく入力しません。これがあなたがやっていることでない場合は、再度実際のコードを投稿する必要があります。 – Naros