在Spring Data Repositories with Hibernate中使用getReferenceById而不是findById的场景是什么?

eeq64g8w  于 2023-11-21  发布在  Spring
关注(0)|答案(1)|浏览(192)

我们正在使用Spring Data 3.1和Hibernate 6.2,并且想知道何时使用getReferenceById以及何时使用findById。在Spring Data with Hibernate的早期版本中,我们使用getById,如果实体不存在,则会立即抛出异常。因此,在我们期望实体存在的场景中,我们使用getById,并且在id可以是可选的场景中,我们使用getById。使用findById。这种方法似乎已经改变。
那么,仍然使用getReferenceById的情况是什么呢?

var user = userRepository.findById(id).orElseThrow();

字符串
到处都是,

var user = userRepository.getReferenceById(id);


我知道getReferenceById只返回一个代理,但我没有看到需要使用它的用例。

ubof19bj

ubof19bj1#

当我们更新实体关系时,使用getReference()可以消除到数据库的不必要的往返。
使用getReference的情况很少
1.删除实体
1.更新实体关系
然而,Hibernate并没有遵循getReference()的默认规范来尽可能地保存数据库往返。因此,当我们检索实体代理时,它不会抛出异常,即使它们在数据库中不存在。
它可能会导致一些潜在的错误,因为它不抛出异常。使用时要小心。
参考此document

相关问题