我正在使用2个不同的事务获取'org.hibernate.ObjectDeletedException:传递给合并的已删除实例'

时间:2019-04-24 10:09:26

标签: java hibernate spring-boot spring-data-jpa

我在服务类中的2种不同方法和事务中使用Spring Data JPA Repository方法deleteAll()和saveAll(List)。在deleteAll()调用之后,调用saveAll(List)方法来重新填充表,但是我不断收到org.hibernate.ObjectDeletedException:已删除实例传递给合并错误。

@Service
ServiceClass
{

   @Autowired MyRepository repository;

   public void test()
   {
       List<myEntity> entities = new ArrayList<>();
       //code to populate list

       clearTable();
       populateTable(entities);
   }

   @Modifying
   @Transactional
   private void clearTable()
   {
       repository.deleteAll();
   }

   @Modifying
   @Transactional
   private void populateTable(List<myEntity> entities)
   {
       repository.saveAll(entities);
   }

}

//Repository class
public interface MyRepository extends CrudRepository<myEntity, Long>
{
}

1 个答案:

答案 0 :(得分:0)

CrudRepository中delete的内部实现与

@Transactional
    public void delete(T entity) {

        Assert.notNull(entity, "The entity must not be null!");
        em.remove(em.contains(entity) ? entity : em.merge(entity));
    }

在删除实体之前,该实体必须处于管理状态。我们可以使用某些功能进行合并,查找等操作。注意:关闭EntityManager后,将分离其所有实体。

删除后也要提交