2017-10-10 6 views
0

OneToMany関係についてEnvers監査テーブル上の外部キーの空:私は次のような関係を持っており、外部キーは新しい改正後の監査テーブルに常に空です

@ManyToOne 
@Audited(targetAuditMode=RelationshipTargetAuditMode.NOT_AUDITED) 
@JoinColumn(name="mail_iid") 
@private Mail mail; 

...

@OneToMany(cascade=Cascade.ALL, orphan = true, fetch= fetchType.LAZY) 
@JoinColumn(name="mail_iid") 
private List<Attachments> attachments; 

新しいレジスタを挿入した後、元のテーブルにはリビジョン1ではなくiidがあります。

誰かがこの問題について知っています。

答えて

0

双方向関係を適切に管理していない1つの方法があります。

は、私はあなたが決してAttachmentsエンティティに新しく作成されたMailエンティティを割り当てることAttachments#setMailを呼び出しておらず、代わりに、単にコレクションあなたのMailエンティティのカスケードにAttachmentsエンティティを追加している疑いがあります。

このタイプの双方向関係のメンテナンスは間違っています。特に、エンティティインスタンスが1LCから検査されていてデータベースからリフレッシュされない場合は、実際には間違った結果につながる可能性があります。これは、あなたのmail_iidフィールドにnullという監査テーブルが表示されている理由です。

あなたが期待しているだろうとあなたのコードは、あなたの監査テーブルに読み込まれているmail_iidになってしまいます、あなたはこのようにそれを行うとの関係の両側が正しく

// setup bidirectional mappings 
attachments.setMail(mail); 
mail.getAttachments().add(attachments); 

を設定し得ることを確認する必要がありますすでに1LCにロードされているエンティティのオブジェクトグラフのキャッシュされたインスタンスをトラバースするときの問題も回避します。

関連する問題