我正在尝试获取数据库操作中已删除实体的列表,以实现自定义审核。不幸的是,仅仅覆盖 remove 方法 EntityManager
remove
EntityManager
我能够通过使用 实体管理器 UnitOfWorkChangeSet . 奇怪的是,删除的实体列表总是空的。
实体管理器
UnitOfWorkChangeSet
我怀疑客户机调用方法的方式有问题,但不太确定。客户机从实体的实体集合中移除项目,方法是在对象上移除项目,然后调用 persist 方法中包含集合的实体。这种方法的工作原理是利用级联机制从数据库中删除对象,但是我在删除对象的列表中找不到删除的实体。
persist
访问变更集中已删除的实体:
Map<ObjectChangeSet, ObjectChangeSet> deletedObjects = entityManager.unwrap(UnitOfWork.class) .getCurrentChanges() // returns always an empty list .getDeletedObjects(); return deletedObjects.values().stream() .map(v -> v.getUnitOfWorkClone()) .collect(Collectors.toList());
坚持 方法被调用。它总是返回一个空列表。
坚持
getDeletedObjects()
管理总结
entityManager.getTransaction().begin(); entityManager.delete(entity); final Map deletedObjects = ((RepeatableWriteUnitOfWork) entityManager .unwrap(UnitOfWork.class)).getDeleted(); // process deleted objects entityManager.getTransaction().commit();
免责声明
我的第一个错误是,试图获取事务之外的已删除对象。虽然这种方法适用于新对象和修改过的对象,但不适用于已删除的对象。
我的第二个错误是试图进入 currentChanges getCurrentChanges() UnitOfWork 到 RepeatableWriteUnitOfWork . 在以后的版本中,可能会直接展开到这个类,正如 Chris
currentChanges
getCurrentChanges()
UnitOfWork
RepeatableWriteUnitOfWork