Envers,与JoinColumn一个多对一,被审计错误的列(Envers, for a Many

2019-10-17 19:58发布

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

Answer 1:

这可以是具有使用referencedColumnName和RTAM.NOT_AUDITED的交叉点的一个错误。 请提交错误报告@ https://hibernate.onjira.com/ ,envers组件。



文章来源: Envers, for a ManyToOne with JoinColumn, is auditing the wrong column