当审核外键,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;
请注意,对地址的地址类型属性被加入到ENTITYID列,而不是主键“ID”列。 还要注意使用RelationTargetAuditMode.NOT_AUDITED的:我要审核的外键,但我不希望审核更改AddressTypeLookup。 问题是,当Envers记录变更外键,它记录AddressTypeLookup主键值“ID”,而不是ENTITYID。 如何使Envers记录使用的ENTITYID值?
[如果你想知道为什么我想这样的:我们有查找数据的数据库(又名主/参考数据)。 它记录历史记录:所有行自/至日期有效。 id列是唯一正确的; 在ENTITYID识别特定的事情 - 比如一个特定的地址类型的所有版本。 所有的查找表被复制到一个应用程序的数据库 - 但只有当前数据被复制,而不是历史数据。 ]