`

Hibernate中get()与load()不同点分析

阅读更多

      Hibernate中两个极为相似的方法Hibernate get()与Hibernate load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于:


◆如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception.

◆load()方法可以返回实体的代理类实例,而get()永远只返回实体类.

◆load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接调用SQL完成查找.

 

Hibernate  get方法和Hibernate load方法的根本区别在于:如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。
对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

分享到:
评论

相关推荐

    hibernate中get和load方法的区别

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

    hibernate中文参考文档

    以上只是Hibernate框架部分核心知识点的概述,实际应用中还有更多细节和高级特性,如Cascading(级联操作)、Callbacks(回调事件)、Querydsl、Spring与Hibernate的整合等。深入学习并掌握Hibernate,将极大地提升...

    hibernate4.1中文api

    ### hibernate4.1中文API知识点汇总 #### 1. 教程 ##### 1.1 第一部分 - 第一个Hibernate应用程序 - **设置**: 安装必要的开发环境,包括Java SDK、IDE(如Eclipse或IntelliJ IDEA)、Hibernate库等。 - **第一节...

    hibernate项目搭建与Demo

    8. **Demo示例**:提供的Demo可能包含了对单个对象的多种查询方法,如`session.load()`, `session.get()`, `session.createQuery()`等,这些方法演示了如何通过Hibernate执行不同的数据库查询。 9. **事务管理**:...

    hibernate5.5.4

    例如,使用Session对象的save()或persist()方法可实现对象的持久化,而get()和load()用于查询,update()和merge()用于更新,delete()则用于删除。 4. **级联操作**: 在关联映射中,Hibernate允许级联操作,这意味着...

    常见hibernate面试题.doc

    与`load()`不同的是,`get()`不支持懒加载,它会在调用时立即执行数据库查询。 #### 3. Hibernate的工作原理及为什么使用 - **工作原理**: - 读取并解析配置文件:初始化时,Hibernate首先读取配置文件(如`...

    hibernate增删改查和动态sql

    - **读取(Read):** 可以通过`Session.get()`、`Session.load()`或HQL查询来获取数据。 - **更新(Update):** 使用`Session.update()`或`Session.merge()`更新已存在的实体。 - **删除(Delete):** `...

    hibernate讲义

    - 加载和查询:`session.get()` 用于按主键加载对象,`session.load()` 返回代理对象,`session.createQuery()` 和 `session.createCriteria()` 用于构建 HQL(Hibernate 查询语言)或 Criteria 查询。 5. **事务...

    hibernate面试题

    在Java的持久化框架Hibernate中,面试经常涉及的关键知识点包括数据库优化、多表查询处理以及Session的load()和get()方法的区别。以下是对这些主题的深入解析: **数据库优化** 当面对数据库条件查询速度缓慢的问题...

    hibernate中的几个重要方法以及调用[参照].pdf

    本文将深入探讨Hibernate中的一些重要方法及其调用,包括get()、load()、list()、iterator()以及HQL查询的相关知识点。 1. get()与load()方法: - get()方法:当尝试获取一个对象时,get()首先会在一级缓存中查找...

    菜鸟快速运行第一个hibernate

    6. **持久化操作**:使用Hibernate进行增删改查(CRUD)操作,可以通过Session的save()、update()、delete()和get()、load()方法实现。 7. **HQL和Criteria查询**:Hibernate提供了自己的查询语言HQL(Hibernate ...

    Hibernate课程大纲

    ### Hibernate课程大纲知识点详解 #### 一、Hibernate概述 - **定义**:Hibernate是一个开源的Object-Relational Mapping (ORM) 框架,用于Java应用程序与关系型数据库交互。 - **分层架构**: - **表示层**:如...

    hibernate 调优

    2. **Session 的 load/get 方法**:load 会尝试从二级缓存中获取数据,而 get 不会。 3. **Query 和 list/iterator**:list 仅利用查询缓存,而 iterator 可以利用二级缓存。iterator 在处理大量数据时更为高效,...

    Hibernate In Action中文版电子书

    例如,Session的save()和saveOrUpdate()方法用于保存新对象,get()和load()用于获取对象,update()和merge()用于更新,delete()用于删除。 6. **查询语言(HQL)**:Hibernate提供了一种面向对象的查询语言,即HQL,...

    用Hibernate做的简单租房网

    在这个项目中,我们主要关注的是Hibernate作为Java对象关系映射(ORM)工具如何简化数据访问层的操作,以及如何在实际应用中与Oracle数据库进行交互。 【描述】"hibernate简单实现租房网"揭示了以下几个关键知识点...

    Hibernate查询解决方案

    本文详细介绍了 Hibernate 提供的各种查询方式,包括 `load`、`get`、`createQuery` 和 `find` 等方法,并重点阐述了 HQL 查询的基本用法和高级技巧。通过本文的学习,读者可以掌握 Hibernate 的基本查询操作,并能...

    java框架Hibernate详细PDF教学

    10. **实体状态与生命周期**:了解Hibernate中对象的四种状态(瞬时、持久化、托管、脱管)以及对象在不同状态下的行为。 11. **性能优化**:如何通过批处理、延迟加载、预加载等技术提高Hibernate应用的性能。 这...

    hibernate 开发基础

    除了上述知识点,Hibernate还涉及到性能问题的分析,例如Session缓存的管理,以及在大量数据操作时如何合理控制Session的生命周期和事务的提交。在处理性能问题时,开发者需要考虑合理使用缓存,以及避免不必要的...

    Struts2+Hibernate的增删改查

    在"Struts2+Hibernate的增删改查"项目中,我们主要关注以下几个关键知识点: 1. **Struts2框架**:Struts2是一个基于MVC设计模式的Action驱动的Web应用框架,它提供了请求分发、拦截器链、结果视图管理等功能。在这...

Global site tag (gtag.js) - Google Analytics