Hibernate envers添加审计列(用户名)

时间:2016-01-13 16:09:35

标签: java hibernate hibernate-envers

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

经过google搜索并浏览逆向文档后,我想出了如何实现它。我已经实现了如下:

实施了修订监听器:

@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 中添加表映射。但没有运气。

任何人都可以帮助我确定问题吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

@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;