在 Hibernate 4.3 中,session
中的 load()
返回延迟加载的代理对象,而 get()
返回对象(如果存在)或者 null
如果没有。但是here和 here它提到 getReference()
返回一个代理对象,load()
返回一个带有初始化数据的对象。
在进一步谷歌搜索中,我意识到这些方法来自 IdentifierLoadAccess Interface。所以我的问题是
- 这个
getReference()
在功能上等于 session 的load()
和这个load()
等于session
的get()
? - 这个接口(interface)是 JPA 规范的一部分吗?还是来自 Hibernate Native API?
- 当 session 接口(interface)中已经包含这些功能时,对这些方法有何需求?
最佳答案
EntityManager#getReference()
在功能上等同于session#load()
。这可以通过将工作委托(delegate)给 session#load() 的 hibernate 的 EntityManager 实现 (AbstractEntityManagerImpl
) 来验证。session#load()
和session#get()
在行为上有一些不同。详情请见this .IdentifierLoadAccess
位于org.hibernate
包下。所以它是 Hibernate 原生 API。 JPA规范定义的所有接口(interface)都在包javax.persistence
下。JPA 是用于持久性的标准 Java API,这意味着如果您的应用程序仅使用 JPA API,从理论上讲,它可以在不同的 JPA 提供程序之间移植。即使您更改为使用其他 JPA 提供程序,您的应用程序也可以工作,仅切换到其他 JavaEE 应用程序服务器。
关于java - getReference() 和 load() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32558482/