【问题标题】:Hibernate envers add audit column (username)Hibernate envers 添加审计列(用户名)
【发布时间】:2016-01-13 16:09:35
【问题描述】:

要求为每个审计条目添加用户名列。

经过大量谷歌搜索并浏览了 enverse 文档后,我想出了如何实现它。我已经实现了如下:

实现了一个修订监听器:

@Configurable
public class UserRevisionListener implements RevisionListener
{
    public void newRevision(Object revisionEntity)
    {
        UserRevEntity revision = (UserRevEntity) revisionEntity;
        String username = "";
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        Object principal = auth.getPrincipal();

        if (principal != null && principal instanceof DepotUser)
            username = ((DepotUser) principal).getUsername();

        revision.setUsername(username);
    }
}

创建实体类:

@Entity
@Table(name = "USER_REV_ENTITY")
@RevisionEntity(UserRevisionListener.class)
public class UserRevEntity extends DefaultRevisionEntity
{
    private static final long   serialVersionUID    = 1L;
    private String              username;

    public String getUsername()
    {
        return username;
    }

    public void setUsername(String username)
    {
        this.username = username;
    }
}

我引用了一个链接,其中包含相同“Thinking in Software”的示例。

默认审核工作正常。

首先,带有新用户名列的审计修订表应该会自动生成(我认为!)。它没有生成。

所以,我尝试通过创建表并在 UserRevEntity 中添加表映射。但没有运气。

谁能帮我确定问题?

谢谢,提前。

【问题讨论】:

    标签: java hibernate hibernate-envers


    【解决方案1】:
    @MappedSuperclass
    public class DefaultRevisionEntity implements Serializable {
    
    @Id
    @GeneratedValue
    @RevisionNumber
    private int id;
    
    @RevisionTimestamp
    private long timestamp;
    
    // ... rest of the class body here....
    

    这是 DefaultRevisionEntity,它已经用 id 和时间戳声明了。 对于您的新列用户名,必须在 UserRevEntity 中将其注释为 @Column,如下所示。

    @Column(name="username")
    private String username;
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2015-12-14
      • 2018-12-28
      • 2018-08-09
      • 2018-04-18
      • 2013-05-06
      • 1970-01-01
      • 2018-03-10
      相关资源
      最近更新 更多