мое приложение работает нормально. Но теперь клиент хочет отменить изменения. Уже сделанные транзакции базы данных должны быть отменены.Hibernate Envers undo
Поэтому я настроил Envers и позволил два свойства
необходимых<property name="org.hibernate.envers.track_entities_changed_in_revision">true</property>
<property name="org.hibernate.envers.global_with_modified_flag">true</property>
Аудиторских таблицы создаются и заполняются автоматически. Теперь мой слушатель (CTRL + Z) выполняет следующий отрезал
public void run() {
if (SystemDatabaseManager.isInitialized()) {
if (AppHelper.showQuestion(Display.getCurrent().getActiveShell(), "undo?") == SWT.YES) {
Session session = null;
try {
session = SystemDatabaseManager.getCurrentSession();
AuditReader reader = AuditReaderFactory.get(session);
final Number revision = reader.getRevisionNumberForDate(new Date(Long.MAX_VALUE));
List<Object> test = reader.getCrossTypeRevisionChangesReader().findEntities(revision);
session.beginTransaction();
for(Object object: test) {
session.merge(object);
}
SystemDatabaseManager.commit(session);
} catch (Exception e) {
SystemDatabaseManager.rollback(session);
}
}
}
}
Теперь проблема сливая старое состояние объекта Выдает исключение
«Удаленный объект whould быть повторно сохранен ...»
Я знаю это исключение и то, что он обозначает, но я не знаю, как его решить таким образом.
Большая проблема заключается в том, что изменяются не только примитивные поля. Также меняются отношения.
Есть ли какие-либо решения для моей проблемы?