休眠Envers-传递自定义字段

问题描述 投票:0回答:1

我在休眠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个回答
1
投票

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

如果您要在@Transaction内执行更新,那么事务边界内的所有事情都会在同一线程中发生,所以一切都很好。

© www.soinside.com 2019 - 2024. All rights reserved.