Por que o Hibernate Envers está ignorando minha RevisionEntity personalizada?

Estou desenvolvendo um aplicativo usando o JPA 2.1 (suportado pelo hibernate 4.2.11) com a primavera 4.0.2. Estamos usando o Envers para auditar alterações nas entidades do projeto. Isso está funcionando bem. O problema surge quando tentamos usar a Entidade de Revisão personalizada, conforme a documentação do Envers diz:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog

Criamos uma classe personalizada e um ouvinte personalizado, conforme apontado na documentação, mas parece que eles são totalmente ignorados pelo Hibernate. As classes 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);
  }

}

É como se o hibernate não estivesse levando em consideração essas classes porque deveria ser suficiente para fazer funcionar a anotação: @RevisionEntity (AuditingRevisionListener.class). As outras entidades anotadas são bem reconhecidas, mas isso é simplesmente ignorado. Temos em nossa configuração de primavera (não usamos persistence.xml) os pacotes base a serem verificados ao carregar o contexto de primavera:

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

Isso é suficiente?

Também tentamos outra abordagem. Para definir manualmente o ouvinte de revisão com esta propriedade na configuração EntityManagerFactory

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

Mas obtemos uma classcastexception na primeira linha do método newRevision porque o parâmetro revisionEntity não é da classe AuditedRevisionEntity. Novamente, é como a classe AuditedRevisionEntity não está carregada.

Suponho que seja uma pergunta simples, mas não consigo adivinhar por que a anotação @RevisionEntity está sendo ignorada. Qualquer ideia?

questionAnswers(3)

yourAnswerToTheQuestion