对于具有JoinColumn的ManyToOne,Envers正在审核错误的列

时间:2013-03-11 13:54:04

标签: java hibernate audit hibernate-envers

审核外键时,Envers似乎忽略了JoinColumn注释。

E.g。我有一个像这样的简单类:

@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标识特定的东西 - 例如特定地址类型的所有版本。所有查找表都被复制到应用程序数据库中 - 但只复制当前数据,而不是历史数据。 ]

1 个答案:

答案 0 :(得分:0)

这可能是使用referencedColumnName和RTAM.NOT_AUDITED的交集的错误。请提交错误报告@ https://hibernate.onjira.com/,envers组件。