hibernate Sping Boot JPA:getReferenceById返回休眠代理而不是EntityNotFoundException

zengzsys  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(139)

我无法通过JUnit测试找到问题的解决方案。
数据库初始化为表中的两行(H2数据库)。JUnit测试的目的是检查在搜索具有未知id的行时是否出现异常。
在我的服务中,我有这样的东西:

private MyEntity getMyEntityById(final String id) throws MyBusinessException {
    try {
        MyEntity entity = this.myEntityRepository.getReferenceById(id);
        if (entity == null) {
            throw new MyBusinessException(BusinessError.UNKNOWN_ID_CODE);
        }
    }
    catch (final EntityNotFoundException e) {
        throw new MyBusinessException(BusinessError.UNKNOWN_ID_CODE, e);
    }
}

在测试中,我希望有一个带有BusinessError.UNKNOWN_ID_CODE的MyBusinessException,因为在服务中,我希望有一个EntityNotFoundException,因为getReferenceById()方法的javadoc说:根据JPA持久性提供程序的实现方式,这很可能总是返回一个示例,并在第一次访问时引发javax.persistence.EntityNotFoundException。
至少,我希望返回null。
相反,我返回了一个hibernate代理,测试失败。
我不知道如何得到我所期望的。你能帮我理解一下吗?

bmp9r5qi

bmp9r5qi1#

运行它的简单解决方案是使用transaction进行测试
比如说,

@Test
@Transactional
void testSomething() {
   //logic    
}

相关问题