我正在开发一个使用hibernate envers的项目,以便使用审计数据库。我可以在审计数据库中成功查看审计记录。我使用的实体有两列,其中包含记录器用户的id和该实体的更新程序用户的ID。
我可以在审计数据库中看到删除的审计记录,但我希望删除后更新updater用户ID,但更新程序用户ID没有更新。
我的问题是如何使用在我的数据库中删除该记录的用户ID来创建删除记录的更新程序ID。这是否可以通过配置?如果不可能,这怎么可能?
问候。
答案 0 :(得分:0)
经过几次测试后,我意识到hibernate正在使用AuditEventListener。
在扩展审计事件监听器并覆盖metod AuditEventListener类的onPostDelete之后,我可以做我想做的事。删除审计记录可以通过在此metod中更新来更新。
此致
答案 1 :(得分:-1)
您是否看过Envers手册?
http://docs.jboss.org/envers/docs/#revisionlog
相当直截了当。您只需要一种机制来在监听器中获取登录用户的句柄。
@Entity
@RevisionEntity(ExampleListener.class)
public class ExampleRevEntity extends DefaultRevisionEntity {
private String username;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
public class ExampleListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
ExampleRevEntity exampleRevEntity = (ExampleRevEntity) revisionEntity;
User user = //get logged in user from some context.
exampleRevEntity.setUsername(user.getUsername());
}
}