結合表を監査しないで、監査表に結合列値を保存しようとしています。hibernate-envers onetomany結合クラスは監査されませんが、結合列は監査する必要があります
ここに私のエンティティクラスがあります。
監査済クラスINFO:
@Entity
@Audited
@Table(name = "INFO")
public class Info extends AbstractEntity {
@Id
@Column(name = "ID")
private String id;
/*More Columns */
@ManyToOne
@JoinColumns({ @JoinColumn(name = "FIRST_NAME", referencedColumnName = "FIRST_NAME"),
@JoinColumn(name = "LAST_NAME", referencedColumnName = "LAST_NAME") })
@NotAudited
private Details details;
}
未監査済クラス:詳細:
@Entity
@Table(name = "DETAILS")
public class Details extends AbstractEntity {
@EmbeddedId
private DetailsPK detailsPK;
/*More Columns */
}
主キー/参加のフィールドは、ここで定義されています。ここでは
@Embeddable
public class DetailsPK implements Serializable {
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
}
は、詳細情報があります静的...変化しない...したがって、監査する必要はありません....しかし、INFOの変更を監査すると、名前と姓の両方をキャプチャするINFO_AUDテーブル...これを指定する方法はありますか?
ありがとう、 Joe。
ナロス、上記の解決策を試しました...しかし、監査テーブルのfirst_nameとlast_nameはまだ入力されていません... また、私の前提はあなたのコードでありました.. details.getId()メソッドはdetails.getDetailsPK()メソッドです。私はgetterとsetterをINFOエンティティのシャドウカラムに追加しました。 アドバイス...詳細設定ツールでresolveAuditedShadowColumnsメソッドが必要な理由を詳しく説明してください... 私は完全に新しいものであり、そのことを理解しようとしているので、事前にお詫び申し上げます... – Joe
@ジョー私は完全に答えを書き換えた。私の以前の答えは少し複雑で、実験をした後でした。私はあなたのニーズにきちんと適合し、不要なオーバーヘッドを避ける優れたソリューションを見つけました。 – Naros
私は質問を投稿する前にこれをやってみましたが、うまくいきませんでした...私はただのためにやり直しました...それはまだ動作していません....以下は私が試したコードの行です。 @ManyToOne @JoinColumns({@JoinColumn(名= "FIRST_NAME"、referencedColumnNameと= "FIRST_NAME")は、 @JoinColumn(名= "LAST_NAME"、referencedColumnNameとは= "LAST_NAME")}) @Audited(targetAuditMode = RelationTargetAuditMode 。NOT_AUDITED) プライベート詳細詳細; 注:Info_AudテーブルにはFIRST_NAME列とLAST_NAME列がありますが、details_First_name列とdetails_last_name列はありません。 – Joe