我们正在使用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
只返回一个代理,但我没有看到需要使用它的用例。
1条答案
按热度按时间ubof19bj1#
当我们更新实体关系时,使用getReference()可以消除到数据库的不必要的往返。
使用
getReference
的情况很少1.删除实体
1.更新实体关系
然而,Hibernate并没有遵循getReference()的默认规范来尽可能地保存数据库往返。因此,当我们检索实体代理时,它不会抛出异常,即使它们在数据库中不存在。
它可能会导致一些潜在的错误,因为它不抛出异常。使用时要小心。
参考此document