Я разрабатываю приложение, использующее JPA 2.1 (поддерживается спящим 4.2.11) с пружиной 4.0.2. Мы используем Envers для проверки изменений в объектах проекта. Это прекрасно работает. Проблема возникает, когда мы пытаемся использовать пользовательские Revision Entity в Envers документации говорит: http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlogПочему Hibernate Envers игнорирует мой пользовательский RevisionEntity?
Мы сделали специальный класс и пользовательский слушателю, как указал в документации, но это, кажется, что они полностью игнорируют 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);
}
}
Это как спящий режим не принимая во внимание эти классы, потому что она должна быть достаточно том, чтобы он работал, чтобы использовать аннотацию: @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 игнорируется. Любая идея?
Можете ли вы поделиться, где ты сказал зимуют, чтобы проверить «your.base.package», у меня такая же проблема. Спасибо – OJVM
После отладки envers я обнаружил, что таблица «revinfo» не работает, потому что в моей сущности я не добавлял аннотацию @Table, поэтому имя таблицы ревизий было таким же, как мое имя сущности. после добавления @Table (name = 'REVINFO') все начало работать нормально. – OJVM