在审核外键时,Envers 似乎忽略了 JoinColumn 注释。
例如,我有一个像这样的简单类:
@Audited
@Entity
public class Address {
@Id
@GeneratedValue
private int id;
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@ManyToOne
@JoinColumn (name="addressTypeFk", referencedColumnName="EntityId",nullable=false)
private AddressTypeLookup addressType;
其中引用了这样的查找表:
@Entity
public class AddressTypeLookup
{
@Id
@GeneratedValue
private int id;
private String descr;
private int entityId;
请注意,Address 上的 addressType 属性连接到 entityId 列,而不是主键“id”列。还要注意 RelationTargetAuditMode.NOT_AUDITED 的使用:我想审计外键,但我不想审计对 AddressTypeLookup 的更改。问题是,当 Envers 记录对外键的更改时,它记录的是 AddressTypeLookup 主键值“id”,而不是 entityId。如何让 Envers 记录使用的 entityId 值?
[如果你想知道我为什么想要这个:我们有一个查找数据(又名主/参考数据)的数据库。它记录历史:所有行都有有效的开始/结束日期。id 列是正确唯一的;entityId 标识特定事物 - 例如特定地址类型的所有版本。所有查找表都被复制到应用程序数据库中——但只有当前数据被复制,而不是历史数据。]