在关于如何捕获EntityNotFoundException
的其他类似问题中,主要提示是使用返回null的简单方法,如getOne
从spring-boot v 2.7 +开始,getOne()
和getById()
都被标记为弃用,文档中说使用getReferenceById
代替。
这个问题在其他一些问题中提到过,你不能简单地抓住javax.persistence.EntityNotFoundException
。
这是永远不会被抓住的:
fun getDonation(donationId: Long): DonationDto? {
return try {
val entity: DonationEntity = donationJpaRepository.getById(donationId)
mapper.toDonationDto(entity)
} catch (e : EntityNotFoundException) {
null
}
}
除了降级版本和继续我的生活,我如何捕获异常或处理未找到的实体?
2条答案
按热度按时间abithluo1#
看起来你可以在这种情况下抓住
JpaObjectRetrievalFailureException
。从文档到
JpaObjectRetrievalFailureException
ObjectRetrievalFailureException的JPA特定子类。转换JPA的实体未找到异常。
mpgws1up2#
您只能喜欢
JpaRepository.getReferenceById(ID id)
的javadoc根据JPA持久性提供程序的实现方式,这很可能总是返回一个示例,并在第一次访问时抛出EntityNotFoundException。其中一些将立即拒绝无效的标识符。
如果你关心你的心理健康,使用
CrudRepository.findById()
,它保证如果找不到实体,将返回一个空的可选项,或者更好的方法是,使用EntityManager
并抛弃spring jpa的抽象漏洞。如果您需要加载多个实体,捕获该期望可能无法向客户端给予有关哪个实体加载失败的足够信息。我知道在这种情况下,它只是一个实体,但您可能会遇到需要加载多个实体的情况,使用一致的方法有助于长期维护代码。