Spring-данные jpa создает TransientObjectException по очень специфическому сценарию - PullRequest
4 голосов
/ 22 сентября 2019

Используя spring-boot (2.1.8.RELEASE), у меня есть тест, похожий на этот:

    @Test
    @Transactional
    public void myTest() {
        Company updatedCompany = companyRepository.save(company);

        em.detach(updatedCompany);

        // (1)
        companyRepository.getOne(updatedCompany.getId());

        // (2)
        companyRepository.save(updatedCompany);
    }

, где:

  • company инициализируется какСущность домена.
  • em является EntityManager.
  • companyRepository расширяется JpaRepository<Company, Long>, JpaSpecificationExecutor<Company>.

Это приводит к TransientObjectException на линии (2).

Однако замена строки (1) на companyRepository.findById(updatedCompany.getId()).get() заставляет все работать без исключения.

Это не реальный тест, а воспроизводимая проблема из моего кода, который я 'Я пытаюсь понять.

Еще несколько версий:

  • spring-data-jpa: 2.1.10.RELEASE
  • hibernate-core: 5.3.11.Final
  • hibernate-entitymanager: 5.3.11.Final

1 Ответ

2 голосов
/ 22 сентября 2019

После некоторого исследования, кажется, вызвано: https://hibernate.atlassian.net/browse/HHH-13590.

Обновление ядра гибернации до 5.3.12. Окончательное решение проблемы.

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