1

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

4

1 回答 1

0

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

于 2013-03-12T13:03:35.807 回答