【发布时间】:2015-09-08 08:22:59
【问题描述】:
我的应用程序运行良好。但现在客户想要撤消更改。 已经进行的数据库提交必须撤消。
因此我设置了 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);
}
}
}
}
现在的问题是合并旧的对象状态抛出异常
"删除的对象应该重新保存..."
我知道这个异常及其代表什么,但我不知道如何以这种方式解决它。
最大的问题是不仅原始字段在发生变化。关系也发生了变化。
我的问题有什么解决办法吗?
【问题讨论】:
标签: hibernate hibernate-envers