java - 如何创建自定义字段来在 REVINFO 表中存储用户凭据

标签 java hibernate hibernate-envers

我们正在使用 hibernate-envers 并拥有 *_AUD 表来存储实体的历史状态。还有一个全局 REVINFO 表,其中包含修订号、时间戳。

我需要将用户添加为 REVINFO 表中的字段。如何在REVINFO表中添加“用户”字段?

最佳答案

您绝对可以创建自定义 RevisionInfo 实体。自定义修订实体必须具有一个用 {@link RevisionNumber} 注释的整数值唯一属性(最好是主 ID)和一个用 {@link RevisionTimestamp} 注释的长值属性。

{@link DefaultRevisionEntity} 已经具有这两个字段,因此您可以扩展它,但您也可以从头开始编写自己的修订实体。因此,在您的情况下,修订实体可能如下所示:

@Entity
@RevisionEntity()
public class RevisionsInfo extends DefaultRevisionEntity {

  private Long userId;

  public Long getUserId() { return userId; }

  public void setUserId(final Long uid) { this.userId = uid; }

}

除此之外,您还可以为任何其他特殊需求提供自定义 RevisionListener。请参阅以下示例:

public class RevisionListener implements org.hibernate.envers.RevisionListener
{
    /**
     * {@inheritDoc}
     */
    public void newRevision(final Object revisionInfo)
    {
        // updateInfo your info here if required
    }
}

自定义 RevisionListener 可以作为 RevisionEntity 注释的参数提供。

@RevisionEntity(RevisionListener.class)

关于java - 如何创建自定义字段来在 REVINFO 表中存储用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30184227/

相关文章:

java - JBoss envers 和巨大的审计表

hibernate-envers - Envers 可以使用不同的数据库吗?

java - 更改存储在集合中的对象的状态

java - 如何阻止 JDBC 创建数据库?

hibernate - grails/GORM实例使用get vs read读取的域之间的差异

实现类的Java Null点异常?

hibernate - 在 Hibernate 中使用 CascadeType.ALL 保存顶级实体会导致对相关实体进行不必要的更新

java - 为什么Java ImageIcon不进入catch子句?

java - "PKIX path building failed"和 "unable to find valid certification path to requested target"

Hibernate 命名查询数据库或缓存?