我正在尝试将连接列值保存在审计表中,而不是审计连接表。
下面是我的实体类。
审核的班级信息:
@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_AUD表同时捕获名字和姓氏……有没有办法指定这一点?
谢谢你,乔
发布于 2017-09-29 21:26:49
因为您想要的字段是主键的一部分,所以您可以通过指定一个特殊的审计注释属性来很容易地实现这一点:
@ManyToOne
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Details details;简而言之,这将指示Envers关联的实体Details不是被审计的实体;但是,审计模式应该获取关联实体的主键列的快照。
因此,您应该期望Info_AUD有两个列,分别表示名称值details_FIRST_NAME和details_LAST_NAME。
您不需要对数据模型执行任何其他特殊操作,因为Envers将确保在更改与Info关联的Details对象时,历史行快照中的name列会相应地更新。
https://stackoverflow.com/questions/46478423
复制相似问题