【问题标题】:Hibernate Envers - pass custom fieldHibernate Envers - 传递自定义字段
【发布时间】:2020-04-11 13:41:20
【问题描述】:

我对 Hibernate Envers 有疑问。如何将自定义字段传递到 RevisionListener? 例如:

我有一些带有@Audit 注释的实体,一切正常。但我不知道如何传递“评论”等自定义字段。

@Entity
@Table(name = "REVINFO")
@RevisionEntity(MyRevisionEntityListener.class)
public class RevEntity {
    @Id
    @RevisionNumber
    @Column(name = "REV", nullable = false, updatable = false)
    private Integer id;

    @RevisionTimestamp
    @Column(name = "REVTSTMP", nullable = false, updatable = false)
    private Date timestamp;

    @Column(name = "MODIFIED_BY", length = 100)
    private String modifiedBy;

    @Column(name = "COMMENT", length = 100)
    private String comment;
public class MyRevisionEntityListener implements RevisionListener {
    @Override
    public void newRevision(Object revisionEntity) {
        RevEntity a = (RevEntity) revisionEntity;
       a.setComment("");//how can i populate it?
    }
}

那么,我该如何设置评论字段?

编辑---------

我发现了 ThreadLocal 的一些技巧 - 但是多个“活跃用户”是安全的?

例如:

public class CustomComment {

    public static final CustomComment INSTANCE = new CustomComment();

    private static final ThreadLocal<String> storage = new ThreadLocal<>();

    public void setComment(String comment) {
        storage.set(comment);
    }

    public String get() {
        return storage.get();
    }
}

我有修改实体的服务:

CustomComment.INSTANCE.setComment("custom comment");
someRepository.save(someEntity);

比一切都按我想要的方式工作。 但是这个解决方案安全吗?如果 2 个或更多 ppl“更改”不同的实体,这会有效吗?

【问题讨论】:

    标签: java hibernate spring-boot hibernate-envers


    【解决方案1】:

    比一切都按我想要的方式工作。但是这个解决方案安全吗?如果 2 或 更多的人“改变”不同的实体,这行得通吗?

    如果您在 @Transaction 内执行更新,那么事务边界内的所有内容都将发生在同一个线程中,所以一切顺利。

    【讨论】:

    • 谢谢 :) 还有一件事,是否有任何“简单”的解决方案可以选择“每个”RevEntity 以获得所需的实体 ID?
    • 不客气 :) 我想不出一个“简单”的解决方案,因为所有审计表都引用了 revision_info 表上的 pk 但不会有任何外键,否则你无法删除任何内容。 org.hibernate.envers.AuditReader 可能有一些你想要但不会那样做的东西。
    猜你喜欢
    • 2019-09-26
    • 2018-08-18
    • 1970-01-01
    • 2020-11-17
    • 2013-07-07
    • 2018-10-05
    • 1970-01-01
    • 2020-10-20
    • 2022-12-14
    相关资源
    最近更新 更多