Spring JPA 存储库无法捕获 EntityNotFoundException

Kei*_*fer 8 java spring-data spring-data-jpa

当用户使用无效 ID 搜索我的存储库时,我想抛出一个自定义错误类。这应该很简单,但我似乎无法捕捉到 JpaRepository 抛出的任何错误。我已经多次尝试解决这个问题,但以下是我最直接的尝试:

try {
    Object obj = repository.getOne(id)
}
catch (EntityNotFoundException e) {
    throw CustomException("message");
}
Run Code Online (Sandbox Code Playgroud)

在调试器中运行它时,存储库会抛出我期望的确切异常javax.persistence.EntityNotFoundException,但代码只是跳过了我的 catch 语句,并且函数返回一个错误。

我尝试使用repository.findById(id)类似的结果。我也试过捕捉ExceptionThrowable。有任何想法吗?如果最终我的问题不是很明显,我会在我的帖子中添加更多信息。

JB *_*zet 11

getOne() 只是一个包装 EntityManager.getReference(). 该方法不会抛出任何异常。

它返回一个未初始化的代理,假设实体确实存在。它不会从数据库中获取实体状态,因此甚至不知道它是否存在。它假设确实如此。

如果您尝试访问实体的状态,您只会在稍后收到异常。

使用findById()/ findOne(),检查是否得到非空/非空结果(因为如果实体不存在,这些方法不会抛出任何异常,它们返回空或空),如果是这种情况,则抛出异常。