代码之家  ›  专栏  ›  技术社区  ›  tgr

删除的实体何时写入eclipselink UnitOfWorkChangeSet?

  •  1
  • tgr  · 技术社区  · 6 年前

    我正在尝试获取数据库操作中已删除实体的列表,以实现自定义审核。不幸的是,仅仅覆盖 remove 方法 EntityManager

    我能够通过使用 实体管理器 UnitOfWorkChangeSet . 奇怪的是,删除的实体列表总是空的。

    我怀疑客户机调用方法的方式有问题,但不太确定。客户机从实体的实体集合中移除项目,方法是在对象上移除项目,然后调用 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()

    1 回复  |  直到 6 年前
        1
  •  0
  •   tgr    6 年前

    管理总结

    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

    推荐文章