我想知道给定记录是否存在于数据库中。到目前为止,我已经通过编写 JPA 查询并通过 getSingleResult()
方法运行它来实现这一点。这将抛出 NoResultException
如果具有给定参数的记录不存在。当然,记录不是必须存在的,所以有时这是正常行为,这就是为什么我问自己,是否有必要抛出一个我必须由 catch 块处理的异常?据我所知,异常处理的成本相当大,所以我对这个解决方案不是很满意,而且,我什至不需要对象,我只需要知道它存在于数据库中即可。
有没有更好的方法来检查对象是否存在?例如。使用 getResultList()
并检查它的大小?
原文由 Balázs Németh 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您只想知道该对象是否存在,请将
SELECT COUNT
发送到您的数据库。这将返回 0 或 1。异常处理的成本并没有那么大(除非您在正常操作期间执行了数百万次),所以我不会打扰。
但是代码并不能真正反映您的意图。由于
getSingleResult()
调用getResultList()
在内部,它更清晰:如果您按对象 ID 查询并且启用了缓存,那么如果对象已经加载,这将成为缓存中的简单查找。