使用 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()
让一切无一异常(exception)地运行。
这不是实际测试,而是我试图理解的从我的代码中重现的问题。
更多版本:
- spring-data-jpa: 2.1.10.RELEASE
- hibernate 核心:5.3.11.Final
- hibernate 实体管理器:5.3.11.Final
最佳答案
经过一些研究,似乎是由以下原因引起的:https://hibernate.atlassian.net/browse/HHH-13590 .
将hibernate-core升级到5.3.12.Final解决问题。
关于java - Spring data jpa 在非常具体的场景中抛出 TransientObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050135/