`

hibernate中Session.get 和 load的区别

阅读更多
load和get一共是2个区别 先讲第一个延迟加载
load是true而get是false
意思就是 load采用的是延迟加载的方式 而get不是,hibernate思想是 既然这个方法支持延迟加载 他就认为这个对象一定在数据库存在,在你声明 TFaq tfag2=(TFaq)sess.load(TFaq.class, 300); 这句时候,hibernate就干了一件事
1.查询session缓存
2.缓存中没有这个对象 就创建个代理
因为延迟加载需要代理来执行 所以就创建了个代理
ok 到此为止 这句话就干了个这个 并没有去数据库交互查询
当你使用这个对象 比如tfag2.getTfRtitle()或get方法时候
这个时候 hibernate就去查询二级缓存和数据库,数据库没有这条数据 就抛出异常
整个load方法调用结束 load没什么神奇 这就是他干过所有的事情

load方法讲完了 我在讲一下get方法工作原理
因为hibernate规定get方法不能使用延迟加载 所以和load还是不一样的
TFaq tfag2=(TFaq)sess.get(TFaq.class, 300);
在创建这条语句时候 我们看看hibernate干了哪些事
1.get方法首先查询session缓存 (session缓存就是hibernate的一级缓存 这个概念大家应该清楚吧 )
2.get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象。
3.如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
(这个代理实际就是空的对象 并没有去数据库查询得到的 我们叫代理对象,如果 去数据库查询了 返回到了这个对象 我们叫实体对象就是这个对象真实存在)

我在总结性一句话这2者区别

get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库
分享到:
评论

相关推荐

    Hibernate中Session.get()方法和load()方法的详细比较

    Hibernate中Session.get()方法和load()方法是两个常用的数据访问方法,但它们之间有着本质的区别。 首先,从返回值上看,get()方法直接返回实体类,如果查不到数据则返回null。load()方法则返回一个实体代理对象,...

    session的get与load比较

    在Hibernate中,`Session`接口提供了`get`和`load`两种方法来获取数据库中的实体对象。 1. **get** 方法:尝试从当前Session的缓存中获取指定ID对应的实体对象;如果缓存中不存在,则直接执行SQL查询语句从数据库中...

    Hibernate的get和load方法的区别

    在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,让我们来深入了解一下`get`...

    hibernate get load区别

    ### Hibernate中的Get与Load方法详解 #### 概述 在Hibernate框架中,`get`与`load`方法都是用于从数据库加载实体对象的常用手段。然而,这两种方法在实现细节上有着本质的区别,这些差异主要体现在对缓存的利用、...

    Hibernate中get()和load()的区别.docx

    在Hibernate ORM框架中,获取持久化对象的两种主要方法是`get()`和`load()`。它们都是用来根据主键ID查询数据库中的实体对象,但两者在执行机制和返回结果上有显著的区别。 1. `get()`方法 当调用`session.get()`...

    Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别

    在Hibernate框架中,Session是与数据库交互的主要接口,它提供了多种方法来操作对象的状态和数据。本文主要讨论了`get`、`load`方法以及`flush`、`clear`、`evict`等方法的区别。 首先,让我们关注`get`和`load`的...

    Hibernate配置文.pdf

    在数据加载时,`Session.load()`和`Session.get()`方法有细微差别:`load()`在找不到匹配对象时会抛出异常,而`get()`则返回null,不会打印错误信息。 4. **XML配置文件(hibernate.cfg.xml)** 另一种配置方式是...

    hibernate和session学习

    3. `get()` 和 `load()`: `get()`根据主键获取对象,如果对象不存在,返回null;`load()`同样用于获取对象,但如果对象不存在,会抛出异常。`load()`在延迟加载机制中更为常用。 4. `query()`: 通过HQL(Hibernate ...

    hibernate-3.6.8.Final

    4. **检索(Load/Get)**:`Session.load()`根据标识符加载对象,而`Session.get()`则可能返回null,如果对象不存在。 五、懒加载与级联操作 1. **懒加载(Lazy Loading)**:默认情况下,关联的对象不会立即加载,...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    - **读取(Read)**:使用`Session.get()`或`Session.load()`根据主键获取实体,或使用`Session.createQuery()`或`Session.createCriteria()`执行HQL(Hibernate查询语言)查询。 - **更新(Update)**:修改实体后...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    可以使用`get()`或`load()`方法获取单个对象,`query()`或`createCriteria()`方法创建查询,并通过执行查询获取结果集。例如,使用HQL(Hibernate Query Language)查询: ```java Query<MyEntity> query = session...

    Hibernate的Session的javadoc

    通过Session的get()或load()方法获取的对象默认处于此状态。 - **游离状态(Detached)**:对象曾经是持久化的,但当前未与任何Session关联。对象在游离状态下可以被重新持久化。 2. **对象持久化操作**: - **...

    Hibernate入门示例.doc

    在实际项目中,通常会结合Spring框架来管理Hibernate的SessionFactory和Session。通过Spring的`LocalSessionFactoryBean`和`HibernateTemplate`,可以实现更方便的事务管理和数据库操作。 总结,Hibernate作为强大...

    hibernate 三种 查询 方式 load与get的区别

    本篇文章将详细解析Hibernate中的三种主要查询方式——HQL(Hibernate Query Language)、Criteria API和Query API,并着重讨论`load()`与`get()`方法的区别。 一、HQL查询 Hibernate Query Language(HQL)是...

    hibernate课程笔记.doc

    - **查询**:使用Session的`load()`或`get()`方法获取对象,`createCriteria()`或`createQuery()`构建复杂查询。 - **删除**:通过Session的`delete()`方法。 - **更新**:`update()`方法。 - **保存**:`save()`或`...

    hibernate code.rar

    在这个“hibernate code.rar”压缩包中,我们很可能会找到关于Hibernate的视频教程——"hibernate介绍与动手入门体验.avi",这个资源将引导我们深入了解Hibernate的核心概念和实际应用。 首先,让我们谈谈Hibernate...

    Hibernate 入门操作.ppt

    - **读取**:`session.get()`或`session.load()`用于根据主键获取对象。 - **更新**:修改对象状态后,调用`session.update()`。 - **删除**:调用`session.delete()`。 例如,一个简单的保存操作可能如下所示: `...

    hibernate中get和load的区别共5页.pdf

    在Hibernate框架中,`get`和`load`都是用于从数据库中检索持久化对象的方法,但它们在工作原理和使用场景上存在着显著的区别。本文将深入探讨这两个方法的差异,并结合实际应用进行详细阐述。 首先,`get`方法是...

    在hibernate中的数据库操作

    ### 在Hibernate中的数据库操作 ...特别地,`save`、`get`、`load` 和 `delete` 方法是进行基本 CRUD 操作的基础,而理解它们之间的差异能够帮助开发人员更高效地利用 Hibernate 来处理数据库交互。

Global site tag (gtag.js) - Google Analytics