¿Por qué Hibernate Envers ignora mi RevisionEntity personalizada?

Estoy desarrollando una aplicación usando JPA 2.1 (compatible con hibernate 4.2.11) con spring 4.0.2. Estamos utilizando Envers para auditar cambios en las entidades del proyecto. Eso está funcionando bien. El problema surge cuando intentamos utilizar una entidad de revisión personalizada como dice la documentación de Envers:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog

Hicimos una clase personalizada y un oyente personalizado como se indica en la documentación, pero parece que Hibernate los ignora por completo. Las clases personalizadas:

@Entity
@RevisionEntity(AuditingRevisionListener.class)
public class AuditedRevisionEntity extends DefaultRevisionEntity {
  private String username;

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }    
}


public class AuditingRevisionListener implements RevisionListener {
  private static Log log = LogFactory.getLog(AuditingRevisionListener.class.getName());

  @Override
  public void newRevision(Object revisionEntity) {
    AuditedRevisionEntity revEntity = (AuditedRevisionEntity) revisionEntity;
    String userName = SecurityContextHolder.getContext().getAuthentication().getName();
    revEntity.setUsername(userName);
  }

}

Es como si hibernate no tuviera en cuenta estas clases porque debería ser suficiente para que funcione usar la anotación: @RevisionEntity (AuditingRevisionListener.class). Las otras entidades anotadas están bien reconocidas, pero esto simplemente se ignora. Tenemos en nuestra configuración de Spring (no usamos persistence.xml) los paquetes base que se analizarán al cargar el contexto de Spring:

  <context:component-scan base-package="our.basepackage" />

¿Es suficiente?

También hemos intentado otro enfoque. Para configurar manualmente el escucha de revisión con esta propiedad en la configuración EntityManagerFactory

    <prop key="org.hibernate.envers.revision_listener">our.basepackage.AuditingRevisionListener</prop>

Pero obtenemos una classcastexception en la primera línea del método newRevision porque el parámetro revisionEntity no es de la clase AuditedRevisionEntity. Nuevamente, es como la clase AuditedRevisionEntity no está cargada.

Supongo que es una pregunta simple, pero no puedo adivinar por qué se ignora la anotación @RevisionEntity. ¿Alguna idea?

Respuestas a la pregunta(3)

Su respuesta a la pregunta