5 Replies Latest reply on Nov 24, 2010 10:35 AM by fmassart

    Custom revision entity problem

    konyshev Newbie

      Hi 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?