Почему 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 игнорируется. Любая идея?