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