History of database modifications with Hibernate

Martin Cabrera
October 27, 2010 | 2 min read


Envers is one of the Hibernate’s project sponsored by Redhat. Works with Hibernate and Hibernate Entity Manager.

Aims to enable easy auditing of persistent classes. For each audited entity you must annotate your persistent clases with @Audited, a table will be created, which will hold the history of changes made to the entity.

The idea is very similar to CVS or Subersion. Each transaction with updates, deletes or inserts made in the database with hibernate generate a new revision number. One transaction is one revision.

Envers provide a simple way to retrive your data of a revision using: revision number, date, queries with min and max function between others.

You can use Envers wherever Hibernate works: standalone, inside JBoss AS, with JBoss Seam or Spring.

It’s very easy …

public class Usuario {
public enum Rol{
private Long id;
private String usuario;
private String contrasenia;
private Rol rol;
public Long getId() {
return id;
public void setId(Long id) {
this.id = id;

Envers configuration

When configuring your Hibernate (persistence.xml if you are using JPA, hibernate.cfg.xml or other if you are using Hibernate directly), add the following event listeners:


Then, annotate your persistent class with @Audited (like the User example)

And that’s it!


Find audited data

You can access the audit (history) of an entity using the AuditReader interface, which you can obtain when having an open EntityManager.

Search a revision number

the whole documentation is in the Web site:  https://docs.jboss.org/envers/docs/index.html#queries

To ilustrate one example I show the way to search the max number revision of one Entity audited.

We use Envers in a few projects. Works fine and very quickly, we recomended … no dubt ! Envers

Web site: www.jboss.org/envers

Envers documentation: https://docs.jboss.org/envers/docs/index.html

Get our stories delivered to your inbox weekly.