我正在尝试在审核表中保存连接列值,而不是审核连接表。
这是我的实体类。
审核类信息:
@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表同时捕获名字和最后一个名称姓名......有没有办法指定这个?
谢谢你, 乔。
答案 0 :(得分:0)
由于您想要的字段是主键的一部分,因此您可以通过指定特殊的审计注释属性来轻松完成此操作:
@ManyToOne
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Details details;
简而言之,这指示Envers关联实体Details
不是经审核的实体;但是,审计模式应该拍摄关联实体的主键列的快照。
因此,您应该希望Info_AUD
有两列代表名为details_FIRST_NAME
和details_LAST_NAME
的名称值。
您不需要对数据模型做任何其他特殊操作,因为当您更改与Details
关联的Info
对象时,Envers将确保在历史记录中更新名称列相应地排快照。