[Resolvido] Hibernate Envers - Como configurar entidade de revisão personalizada

3 respostas
M

Bom dia, gostaria de saber se alguem tem algum exemplo de configuração de entidade de revisao personalizada, mais especificamente como é a configuração no arquivo persistence.xml.
O que eu ja fiz:

Classe RevisaoListener:

package hibernateUtil;

import org.hibernate.envers.RevisionListener;

public class RevisaoListener implements RevisionListener{

    @Override
    public void newRevision(Object revisionEntity) {
        Revision rev = (Revision) revisionEntity;
        rev.setUsuicod(69);
    }
    
}

Classe revision:

package hibernateUtil;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import org.hibernate.envers.RevisionEntity;
import org.hibernate.envers.RevisionNumber;
import org.hibernate.envers.RevisionTimestamp;

@RevisionEntity(value=RevisaoListener.class)
public class Revision {
    @Id
    @SequenceGenerator(name = "seqRevision", sequenceName = "seqRevision")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqRevision")
    @RevisionNumber
    public Integer id;
    
    @RevisionTimestamp
    public Long timestamp;
    
    Integer usuicod;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Long timestamp) {
        this.timestamp = timestamp;
    }

    public Integer getUsuicod() {
        return usuicod;
    }

    public void setUsuicod(Integer usuicod) {
        this.usuicod = usuicod;
    }
}

A questão que fica no ar é como configur o o hibernate pra usar o listener que estou definindo ao invés do padrão.

3 Respostas

M
Putz que besteira, era só anotar a classe de revisão com o @Entity, não precisa mecher no arquivo persistence.xml. No meu caso ficou assim:
package hibernateUtil;  
  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  
import javax.persistence.SequenceGenerator;  
import org.hibernate.envers.RevisionEntity;  
import org.hibernate.envers.RevisionNumber;  
import org.hibernate.envers.RevisionTimestamp;  
  
@RevisionEntity(value=RevisaoListener.class)  
public class Revision {  
    @Id  
    @SequenceGenerator(name = "seqRevision", sequenceName = "seqRevision")  
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqRevision")  
    @RevisionNumber  
    public Integer id;  
      
    @RevisionTimestamp  
    public Long timestamp;  
      
    Integer usuicod;  
  
    public Integer getId() {  
        return id;  
    }  
  
    public void setId(Integer id) {  
        this.id = id;  
    }  
  
    public Long getTimestamp() {  
        return timestamp;  
    }  
  
    public void setTimestamp(Long timestamp) {  
        this.timestamp = timestamp;  
    }  
  
    public Integer getUsuicod() {  
        return usuicod;  
    }  
  
    public void setUsuicod(Integer usuicod) {  
        this.usuicod = usuicod;  
    }  
}
G

comigo não funcionou, tenho a estrutura conforme manda a doc. semelhante com a do amigo acima.
o meu entity ta assim:

@Entity
@Table(name = "REVINFO")
@RevisionEntity(value = MyRevisionListener.class)
public class MyRevisionEntity extends DefaultRevisionEntity {
...

porém nada acontece. o hibernate não usa o meu revision. estou usando versão 4.1.0 e me parece que seria apenas anotar a @RevisionEntity para que ele utilizasse a minha classe.
como vcs estão fazendo?

A

Tem que mapear a entidade de revisão no teu persistence.xml
exemplo:

<description>Persistência do Sistema Prax.</description>
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	<jta-data-source>java:/PraxDS</jta-data-source>

br.com.xxx.projeto.auditoria.Auditoria

Criado 26 de dezembro de 2012
Ultima resposta 14 de out. de 2013
Respostas 3
Participantes 3