【问题标题】:Spring data jpa throws TransientObjectException on a very specific scenarioSpring data jpa 在非常具体的场景中抛出 TransientObjectException
【发布时间】:2019-09-22 14:26:36
【问题描述】:

使用 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 被初始化为域实体。
  • emEntityManager
  • companyRepository 扩展 JpaRepository<Company, Long>, JpaSpecificationExecutor<Company>

这会在(2) 线上抛出一个TransientObjectException

但是,将行 (1) 替换为 companyRepository.findById(updatedCompany.getId()).get() 会使一切运行无异常。

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

更多版本:

  • spring-data-jpa: 2.1.10.RELEASE
  • 休眠核心:5.3.11.Final
  • hibernate-entitymanager: 5.3.11.Final

【问题讨论】:

  • 这不是一个解决方案,但你不需要 @Transactional 在测试课上
  • 正如我所说,这是复制,不是实际测试

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


【解决方案1】:

经过一番研究,似乎是由:https://hibernate.atlassian.net/browse/HHH-13590引起的。

升级 hibernate-core 到 5.3.12.Final 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多