2015-09-14 69 views
1

在Hibernate 4.3,load()session,利用遲緩裝載返回代理對象,如果它存在或null如果不get()返回對象。但herehere其提到getReference()返回一個代理對象和load()返回與初始化數據的對象。 論進一步谷歌搜索我意識到,這些方法是從IdentifierLoadAccess接口。所以我的問題是差()和負載()

  1. 難道這getReference()會議功能等於load()load()等於get()session
  2. 此接口是否是JPA規範的一部分?或從Hibernate Native API?
  3. 當這些功能具有這些功能時,這些方法的需求已經在會話界面中介紹過了嗎?

回答

2
  1. EntityManager#getReference()在功能上等於session#load()。這可以通過hibernate的EntityManager實現(AbstractEntityManagerImpl)來驗證,該實現將工作委派給session#load()。

    session#load()session#get()在行爲的一些差異。詳情請參閱this

  2. IdentifierLoadAccess是根據包org.hibernate。所以它是Hibernate本地API。所有由JPA規範定義的接口都在javax.persistence包中。

  3. JPA是持久化標準的Java API,這意味着,如果你的應用程序只使用JPA API,從理論上講,它是不同的JPA提供者之間移植。即使您更改爲使用其他JPA提供程序只切換到其他JavaEE應用程序服務器,您的應用程序也可以工作。

1

IdentifierLoadAccess的包裝是org.hibernate。因此它不是JPA規範的一部分。否則,它將在javax.persistence之下。

IdentifierLoadAccess.getReference()正如示例所示,相當於EntityManager.getReference(),也是舊的,名字很差的Session.load()

IdentifierLoadAccess.load(),正如示例所示,相當於EntityManager.find(),並且也相當於Session.get()

據我所知,這個IdentifierLoadAccess接口及其包含的方法對於爲ID和簡單自然ID(以及較小程度上自然ID)之間的實體提供一致的加載/ getReference方法很有用。請參閱Session api文檔中以by開頭的所有方法。

+0

感謝您的回答@ JB-Nizet。對第三個問題有什麼想法? – Ram

+0

我修改了答案。 –