Spring Jpa删除失败后保存实体

Spring Jpa删除失败后保存实体,spring,hibernate,jpa,transactions,spring-data,Spring,Hibernate,Jpa,Transactions,Spring Data,我试图删除一个实体,如果由于约束而无法删除,我想将其标记为逻辑删除 这是我的代码: @Transactional public void removeEntity(EntityDto e) { Entity entity = entityRepository.findOne(e.getId()); try { entityRepository.delete(e.getId()); entityRepository.flush(); }

我试图删除一个实体,如果由于约束而无法删除,我想将其标记为逻辑删除

这是我的代码:

  @Transactional
  public void removeEntity(EntityDto e) {

    Entity entity = entityRepository.findOne(e.getId());

    try {
      entityRepository.delete(e.getId());
      entityRepository.flush();

    } catch (DataIntegrityViolationException ex) {
      logger.debug("Logical removal");

      entity.setLogicalRemovalDate(new Date());
      entityRepository.save(entity);
    }
  }
调用save()方法后,出现以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.ObjectDeletedException: deleted instance passed to merge
我有没有办法实现这个功能


谢谢。

如果不在新事务中使用新的Hibernate会话,就不能这样做。说:

如果会话引发异常,包括任何SQLException, 立即回滚数据库事务,调用Session.close() 并放弃会话实例。某些会议方法不适用 使会话保持一致状态。没有引发异常 Hibernate可以被视为可恢复的


在尝试删除实体之前,您可能应该检查是否没有其他实体引用要删除的实体。或者总是在逻辑上删除它,因为这似乎是您对引用实体所做的操作。

谢谢,通过创建两个事务方法修复了此问题,一个用于逻辑删除,一个用于物理删除。