Custom revision entity problem
konyshev Sep 28, 2010 6:10 AMHi there!
I'm trying to setup audit for our project.
I started from the default configuration which works fine.
The next step is to store the user which has made changes.
Following by the manual I created custom entity revision:
package ru.csbi.registry.utils.audit;
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;
@Entity
@Table(name="REVISIONS")
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity {
@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;
}
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;
//TODO: create more unique hash code
result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)) + username.hashCode();
return result;
}
}
package com.csbi.samples.audit; 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; @Entity @Table(name="REVISIONS") @RevisionEntity(CustomRevisionListener.class) public class CustomRevisionEntity { @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; } 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)) + username.hashCode(); return result; } }
And also custom listener:
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: org.hibernate.envers.configuration.metadata.AuditMetadataGenerator - Generating first-pass auditing mapping for entity com.csbi.samples.domain.Property. DEBUG: org.hibernate.envers.configuration.metadata.AuditMetadataGenerator - Generating second-pass auditing mapping for entity com.csbi.samples.domain.Property. INFO : org.hibernate.cfg.HbmBinder - Mapping class: com.csbi.samples.domain.Property_AUD -> PROPERTIES_AUD INFO : org.hibernate.cfg.HbmBinder - Mapping class: org.hibernate.envers.DefaultRevisionEntity -> REVINFO
Take a look at the last line in the output given.
There is still DefaultRevisionEntity mapped instead of CustomRevisionEntity.
I have no idea atm what is wrong. Any suggestions?