【发布时间】:2015-05-12 07:17:44
【问题描述】:
我们正在使用 hibernate-envers 并拥有存储实体历史状态的 *_AUD 表。还有一个包含修订号、时间戳的全局 REVINFO 表。
我需要将用户添加为 REVINFO 表中的字段。如何在 REVINFO 表中添加“用户”字段?
【问题讨论】:
标签: java hibernate hibernate-envers
我们正在使用 hibernate-envers 并拥有存储实体历史状态的 *_AUD 表。还有一个包含修订号、时间戳的全局 REVINFO 表。
我需要将用户添加为 REVINFO 表中的字段。如何在 REVINFO 表中添加“用户”字段?
【问题讨论】:
标签: java hibernate hibernate-envers
您绝对可以创建您的自定义 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)
【讨论】: