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

Spring data jpa在一个非常特定的场景中抛出TransientObject异常

  •  1
  • orirab  · 技术社区  · 7 年前

    使用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() 让一切都毫无例外地运行。

    这不是一个实际的测试,而是我试图理解的代码中重现的问题。

    更多版本:

    • 春季数据jpa:2.1.10。释放
    • hibernate核心:5.3.11。最终的
    • hibernate entitymanager:5.3.11。最终的
    0 回复  |  直到 7 年前
        1
  •  2
  •   orirab    7 年前

    经过一些研究,似乎是由以下原因引起的: https://hibernate.atlassian.net/browse/HHH-13590 .

    将hibernate core升级到5.3.12。最终解决了这个问题。