Я являюсь пользователем поддержки тестирования транзакций Spring, которая откатывает тесты, когда они выполнены, и из-за дизайна envers ревизии не создаются.Я создал хак, который, по-видимому, позволяет «сказать» энверам выполнить свою работу вручную до совершения транзакции, но позволяет Spring продолжать откат.
Эти фрагменты должны помочь.1. Создайте свой собственный audlistener, который переопределяет существующий приемник аудита enversЭто позволяет получить доступ к статическому члену, видимому для модульных тестов.Возможно, есть лучший способ, но он работает.
public class AuditEventListenerForUnitTesting extends AuditEventListener {
public static AuditConfiguration auditConfig;
@Override
public void initialize(Configuration cfg) {
super.initialize(cfg);
auditConfig = super.getVerCfg();
}
}
измените ваш файл persistence.xml, чтобы включить этот новый класс слушателей вместо класса, предоставляемого envers
(при необходимости повторите для других слушателей))
Теперь в рамках "модульного" теста:
{
saveNewList(owner); //code that does usual entity creation
em.flush();
EventSource hibSession = (EventSource) em.getDelegate();
AuditEventListenerForUnitTesting.auditConfig.getSyncManager().get(hibSession).doBeforeTransactionCompletion(hibSession);
//look for envers revisions now, and they should be there
}
Мне это нужно, потому что у меня есть несколько запросов JDBC к объектам гибернации, присоединенным к таблицам версий.