我正在嘗試爲我們的項目設置審計。 我從可以正常工作的默認配置開始。創建Envers自定義修改實體
下一步是存儲已進行更改的用戶。 按照手冊我創建的自定義實體修訂:
package com.csbi.samples.utils.audit;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.Date;
import org.hibernate.envers.RevisionNumber;
import org.hibernate.envers.RevisionTimestamp;
import org.hibernate.envers.RevisionEntity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Table(name="REVISIONS")
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity implements Serializable {
private static final long serialVersionUID = -1255842407304508513L;
@Id
@GeneratedValue
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Transient
public Date getRevisionDate() {
return new Date(timestamp);
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof CustomRevisionEntity)) return false;
CustomRevisionEntity that = (CustomRevisionEntity) o;
if(id != that.id) return false;
if(timestamp != that.timestamp) return false;
if(timestamp != that.timestamp) return false;
if(username != that.username) return false;
return true;
}
public int hashCode() {
int result;
result = id;
result = 31 * result + (int) (timestamp^(timestamp >>> 32));
return result;
}
public String toString() {
return "DefaultRevisionEntity(user = " + username + "id = " + id + ", revisionDate = " + DateFormat.getDateTimeInstance().format(getRevisionDate()) + ")";
}
}
而且還定製的監聽器:
package com.csbi.samples.audit;
import org.hibernate.envers.RevisionListener;
public class CustomRevisionListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername("username"); //for testing
}
}
下面是從日誌裏的句子:
DEBUG:組織.hibernate.envers.configuration.metadata.AuditMetadataGenerator - 生成first-p屁股審計映射實體 com.csbi.samples.domain.Property。
DEBUG: org.hibernate.envers.configuration.metadata.AuditMetadataGenerator - 爲實體 com.csbi.samples.domain.Property生成第二遍審計映射。
INFO:org.hibernate.cfg.HbmBinder - 映射類:com.csbi.samples.domain.Property_AUD - > PROPERTIES_AUD
INFO:org.hibernate.cfg.HbmBinder - 映射類: org.hibernate.envers。 DefaultRevisionEntity - > REVINFO
看看輸出的最後一行。 還有DefaultRevisionEntity
而不是CustomRevisionEntity
。
我不知道什麼是錯的。有什麼建議麼?
現在......怎麼辦?「用戶名」設置爲有意義的事......我不知道是誰在做修改,我不能得到那個吧? –
使用靜態變量注入,如果你,如果你使用縫使用彈簧或服務工廠。 https://209.132.182.48/message/641790。希望有所幫助。 – Vyacheslav