java - getReference() 和 load() 之间的区别

标签 java hibernate session jpa

在 Hibernate 4.3 中,session 中的 load() 返回延迟加载的代理对象,而 get() 返回对象(如果存在)或者 null 如果没有。但是herehere它提到 getReference() 返回一个代理对象,load() 返回一个带有初始化数据的对象。 在进一步谷歌搜索中,我意识到这些方法来自 IdentifierLoadAccess Interface。所以我的问题是

  1. 这个 getReference() 在功能上等于 sessionload() 和这个 load()等于 sessionget()
  2. 这个接口(interface)是 JPA 规范的一部分吗?还是来自 Hibernate Native API?
  3. 当 session 接口(interface)中已经包含这些功能时,对这些方法有何需求?

最佳答案

  1. EntityManager#getReference() 在功能上等同于 session#load()。这可以通过将工作委托(delegate)给 session#load() 的 hibernate 的 EntityManager 实现 (AbstractEntityManagerImpl) 来验证。

    session#load()session#get() 在行为上有一些不同。详情请见this .

  2. IdentifierLoadAccess 位于 org.hibernate 包下。所以它是 Hibernate 原生 API。 JPA规范定义的所有接口(interface)都在包javax.persistence下。

  3. JPA 是用于持久性的标准 Java API,这意味着如果您的应用程序仅使用 JPA API,从理论上讲,它可以在不同的 JPA 提供程序之间移植。即使您更改为使用其他 JPA 提供程序,您的应用程序也可以工作,仅切换到其他 JavaEE 应用程序服务器。

关于java - getReference() 和 load() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32558482/

相关文章:

java - 加快从 InputStream 读取和使用 FileOutputStream 写入的速度

java - 如何将查询映射到非实体类+实体类

java - 使用 @JoinTable 和 SQLQuery 获取连接

java - MYSQL Hibernate 5.2 createStoredProcedureQuery

javascript - 如何测试在浏览器中发送需要身份验证的请求的函数?

java - 因果集群。即使交易终止后数据也不在图表中

java - Glassfish 3.1.2 不包含 javax.persistence jar

java - 无法使用 Caffeine 创建简单缓存

Java Jtree :how to display selected node

php - 由于缓存,CakePHP Flash 消息未显示