Я получаю «org.hibernate.ObjectDeletedException: удаленный экземпляр передан для слияния» с использованием 2 разных транзакций - PullRequest
0 голосов
/ 24 апреля 2019

Я использую методы репозитория Spring Data JPA deleteAll () и saveAll (List) в 2 разных методах и транзакциях в классе обслуживания. Метод saveAll (List) вызывается для повторного заполнения таблицы после вызова deleteAll (), но я продолжаю получать 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 голосов
/ 24 апреля 2019

Внутренняя реализация удаления в CrudRepository имеет вид

@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 все его сущности будут отключены.

Поэтому сделайте коммит после удаления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...