首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >hibernate-envers多个未审核的连接类,但需要审核连接列

hibernate-envers多个未审核的连接类,但需要审核连接列
EN

Stack Overflow用户
提问于 2017-09-29 05:14:48
回答 1查看 2K关注 0票数 2

我正在尝试将连接列值保存在审计表中,而不是审计连接表。

下面是我的实体类。

审核的班级信息:

代码语言:javascript
运行
复制
@Entity
@Audited
@Table(name = "INFO")
public class Info extends AbstractEntity {

    @Id
    @Column(name = "ID")
    private String id;

    /*More Columns */ 

    @ManyToOne
    @JoinColumns({ @JoinColumn(name = "FIRST_NAME", referencedColumnName = "FIRST_NAME"),
        @JoinColumn(name = "LAST_NAME", referencedColumnName = "LAST_NAME") })
    @NotAudited
    private Details details;


}

未审核的类:详细信息:

代码语言:javascript
运行
复制
@Entity
@Table(name = "DETAILS")
public class Details extends AbstractEntity {

    @EmbeddedId
    private DetailsPK detailsPK;
    /*More Columns */ 

}

主键/连接字段定义如下:

代码语言:javascript
运行
复制
@Embeddable
public class DetailsPK implements Serializable {

    @Column(name = "FIRST_NAME")
    private String firstName;

    @Column(name = "LAST_NAME")
    private String lastName;

}

这里,详细信息是静态的.它不会改变。因此,需要审核...但是,在审计信息更改时,我希望INFO_AUD表同时捕获名字和姓氏……有没有办法指定这一点?

谢谢你,乔

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 21:26:49

因为您想要的字段是主键的一部分,所以您可以通过指定一个特殊的审计注释属性来很容易地实现这一点:

代码语言:javascript
运行
复制
@ManyToOne
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
private Details details;

简而言之,这将指示Envers关联的实体Details不是被审计的实体;但是,审计模式应该获取关联实体的主键列的快照。

因此,您应该期望Info_AUD有两个列,分别表示名称值details_FIRST_NAMEdetails_LAST_NAME

您不需要对数据模型执行任何其他特殊操作,因为Envers将确保在更改与Info关联的Details对象时,历史行快照中的name列会相应地更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46478423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档