Почему Hibernate Envers игнорирует мой пользовательский RevisionEntity?

Я разрабатываю приложение с использованием JPA 2.1 (поддерживается hibernate 4.2.11) с весны 4.0.2. Мы используем Envers для аудита изменений в объектах проекта. Это работает нормально. Проблема возникает, когда мы пытаемся использовать пользовательский объект Revision, как сказано в документации Envers:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog

Мы создали пользовательский класс и пользовательский прослушиватель, как указано в документации, но, похоже, они полностью игнорируются Hibernate. Пользовательские классы:

@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);
  }

}

Как будто hibernate не учитывает эти классы, потому что должно быть достаточно, чтобы заставить его работать, чтобы использовать аннотацию: @RevisionEntity (AuditingRevisionListener.class). Другие аннотированные объекты хорошо известны, но это просто игнорируется. В нашем весеннем конфиге (мы не используем persistence.xml) мы проверяем базовые пакеты при загрузке весеннего контекста:

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

Этого достаточно?

Мы также попробовали другой подход. Чтобы вручную установить прослушиватель редакции с этим свойством в конфигурации EntityManagerFactory

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

Но мы получаем classcastexception в первой строке метода newRevision, потому что параметр revisionEntity не принадлежит к классу AuditedRevisionEntity. Снова, как класс AuditedRevisionEntity не загружается.

Я полагаю, это простой вопрос, но я не могу догадаться, почему аннотация @RevisionEntity игнорируется. Любая идея?

Ответы на вопрос(3)

Ваш ответ на вопрос