【问题标题】:Envers, for a ManyToOne with JoinColumn, is auditing the wrong columnEnvers,对于带有 JoinColumn 的 ManyToOne,正在审核错误的列
【发布时间】:2013-02-26 17:39:16
【问题描述】:

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

【问题讨论】:

    标签: java hibernate audit hibernate-envers


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我现在已经在 hibernate jira 网站上记录了这个:HHH-8066
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多