当我们调用find()
注释字段的getter方法时,像EclipseLink或Hibernate这样的持久性提供程序会使用getReference()
或ManyToOne
来加载实体吗?
find()
会返回null
getReference()
会抛出EntityNotFoundException
那么在找不到实体的情况下,getter应该怎么做?
答案 0 :(得分:0)
引发了一个持久性提供程序,如EclipseLink或Hibernate
uses find() or getReference()
在我们调用ManyToOne注释字段的getter方法时加载实体?
Hibernate不会在后台调用find或getRefernce。这些方法用于客户端定位实体或代理。
如果你有一个@ManyToOne
关联,Hibernate已经知道如何获取父实体,因为在幕后,JPA @ManyToOne
只是一个外键。
但是当您导航关联时,Hibernate已经知道FK的值,因为加载子实体的原始ResultSet
也包含FK的值。
但是,Hibernate并不是必须转到数据库,因为加载周期如下:
因此,实际上,当我们导航FK时不需要EntityNotFoundException
,因为孩子无法引用不存在的父记录。如果您没有使用FK并且数据库中存在这种不一致,那么Hibernate确实会抛出异常。但那会告诉你,你的数据建模设计可能已经破裂了。