1
我想在審計連接表時保存審計表中的連接列值。hibernate-envers onetomany加入類沒有審計,但連接列需要審計
這是我的實體類。
審計類信息:
@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;
}
這裏,詳細信息靜態...它不會改變...因此,不需要審計......但是,當審計信息變化時,我想t INFO_AUD表來同時捕獲名字和姓氏......有沒有一種方法來指定它?
謝謝, 喬。
Naros,感謝您的幫助...我試過上述解決方案...但審計表中的first_name和last_name仍然沒有填充... 另外,我的假設是在您的代碼中.. 。details.getId()方法是details.getDetailsPK()方法。我將getter和setter添加到INFO實體的陰影列中。 請指教...請問您還可以詳細說明爲什麼我們需要在細節設置器中使用resolveAuditedShadowColumns方法... 我提前道歉,因爲我對envers完全陌生並試圖理解... – Joe
@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 columsn。 – Joe