Java getReference()和load()之间的差异
在Hibernate 4.3中,Java getReference()和load()之间的差异,java,hibernate,session,jpa,Java,Hibernate,Session,Jpa,在Hibernate 4.3中,load()fromsession返回延迟加载的代理对象,get()返回存在的对象,或者null返回不存在的对象。但是它提到,getReference()返回一个代理对象,load()返回一个带有初始化数据的对象。 在进一步的谷歌搜索中,我意识到这些方法来自IdentifierLoadAccess接口。所以我的问题是 这getReference()在功能上是否等于load()fromsession以及这load()是否等于get()fromsession 这个接口
load()
fromsession
返回延迟加载的代理对象,get()
返回存在的对象,或者null
返回不存在的对象。但是它提到,getReference()
返回一个代理对象,load()
返回一个带有初始化数据的对象。
在进一步的谷歌搜索中,我意识到这些方法来自IdentifierLoadAccess接口。所以我的问题是
getReference()
在功能上是否等于load()
fromsession以及这load()
是否等于get()
fromsession
李>
IdentifierLoadAccess
的包是org.hibernate
。因此,它不是JPA规范的一部分。否则,它将位于javax.persistence
下
IdentifierLoadAccess.getReference()
正如示例所示,相当于EntityManager.getReference()
,也相当于旧的、名称不正确的Session.load()
正如示例所示,IdentifierLoadAccess.load()
相当于EntityManager.find()
,也相当于会话.get()
据我所知,这个IdentifierLoadAccess
接口及其包含的方法有助于在ID和简单自然ID(在较小程度上是自然ID)之间提供一致的加载/获取实体引用的方法。查看会话api文档中以by
开头的所有方法
EntityManager#getReference()
在功能上等同于session#load()
。这可以通过hibernate的EntityManager实现(AbstractEntityManagerImpl
)来验证,该实现将工作委托给会话加载()
session#load()
和session#get()
在行为上有些不同。详情请参阅
IdentifierLoadAccess
位于包org.hibernate
下。所以这就是Hibernate原生API。JPA规范定义的所有接口都在包javax.persistence
下
谢谢你的回答。对第三个问题有什么想法吗?我修改了答案。