我们正在使用hibernate-envers并使用* _AUD表来存储实体的历史状态。还有一个全局REVINFO表,其中包含修订号,时间戳。
我需要在REVINFO表中添加用户字段。如何添加"用户" REVINFO表中的字段?
答案 0 :(得分:2)
您绝对可以创建自定义的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)