`
Suzh.Q
  • 浏览: 19533 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Hibernate3.6 中get和load区别

阅读更多

1. get方法,hibernate首先会确认下该id对应的数据是否存在,首先在session一级缓存中查找,然后再去二级缓存中查找,如果还是没有查询到数据,那么就去直接发送查询语句到数据库上查找,如果数据库有的话就返回实体,如果没有的话,就返回null。

2. load方法加载实体对象的时候, 根据映射文件上类级别的lazy属性的设置,来做判断。

 

1) 如果为true(默认为true),首先在session一级缓存中查找,看看该id对应的对象是否存在,不存在做延迟加载,返回实体的代理对象,该代理类为实体的子类,由CGLIB动态生成。此时仅仅是实体的代理类,等到具体使用所要查询的对象的时候,在查询二级缓存和数据库。如果没有找到记录,则抛出异常ObjectNotFoundException

2) 如果为false,就与get查找方式一样,最终若么有记录抛出异常ObjectNotFoundException

 

注意:

1.get和load都未能找到符合条件的记录,get返回null,load抛出异常ObjectNotFoundException.

2.load方法可直接返回实体,可返回没有加载实体数据的代理类,也可返回已加载实体的代理类。而get方法返回有实体数据的对象。

如果在load实体时候,在session级缓存中找到了该id对应的对象,且之前没有经过load之类的延迟加载。那么直接返回实体。

如果load实体的时候,在session级缓存中没有找到了该id对应的对象,且之前没有经过load之类的延迟加载过,那么返回的是没有加载实体数据的代理类。

如果load实体的时候,在session级缓存中找到了该id对应的对象,且之前被延迟加载过,实体对象已被使用过,返回的是已加载实体数据的代理类。

 

而get方法在使用时候,如果在session中找到了该id对应的对象,且被load之类的延迟加载过。返回的是原先代理对象,而不是实体对象。如果该代理对象还没有加载实体数据,那么会查询二级缓存或数据库,返回的还是代理对象(已加载数据的代理对象)

分享到:
评论

相关推荐

    hibernate3.6框架中文文档

    例如,使用save()或saveOrUpdate()方法插入数据,使用get()或load()方法加载数据,使用update()或merge()方法更新数据,使用delete()方法删除数据。 6. **HQL和Criteria查询**: Hibernate提供了自己的查询语言HQL,...

    Hibernate3.6中文API帮助文档

    这篇“Hibernate3.6中文API帮助文档”提供了详尽的指引,帮助开发者更好地理解和应用Hibernate 3.6版本的功能。 一、Hibernate概述 Hibernate通过提供数据持久化层,简化了Java应用程序与数据库之间的交互。它通过...

    hibernate_3.6的一个简单链接Oracle例子

    6. **CRUD操作**:通过Session对象,可以实现对数据库的基本操作,如`save()`, `update()`, `delete()`和`load() / get()`。 7. **查询**:Hibernate支持HQL(Hibernate Query Language)和 Criteria API 进行查询...

    Hibernate(3.6)之初识

    在Hibernate 3.6 版本中,开发者可以享受到更加稳定和高效的数据库操作体验。这篇文章将带你初识Hibernate 3.6,了解其基本概念、配置以及如何进行简单的数据操作。 1. **对象关系映射(ORM)**:ORM 是一种编程...

    hibernate3.6.1源码

    源码中的`SessionImpl`类实现了该接口,我们可以看到诸如`save()`, `update()`, `delete()`, `get()`, `load()`等方法的实现细节。 3. **Criteria API**:在Hibernate 3.6.1中,Criteria API提供了一种类型安全的...

    HIBERNAT3.6 MYSQL无错版配置文件及主程序范例

    标题中的“HIBERNATE3.6 MYSQL无错版配置文件及主程序范例”意味着我们将探讨关于Hibernate 3.6版本与MySQL数据库的集成配置,以及如何编写一个无错误的主程序示例。这个主题涵盖了Java持久层框架Hibernate的核心...

    初学Hibernate的例子,

    本示例将带你逐步了解如何使用Hibernate3.6进行数据库操作。 首先,我们需要理解Hibernate的核心概念。Hibernate提供了一个对象关系映射(ORM)机制,允许我们将Java类与数据库表进行映射,这样我们就可以通过操作...

    Hibernate Developer Guide

    在开发过程中,可以通过多种方式参与到Hibernate社区中,例如提交bug报告、提出改进意见或贡献代码等。社区的活跃成员还包括Hibernate团队和JBoss视觉设计团队。 #### 三、入门指南 ##### 1. 数据库访问 ###### ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.4.2 Session的load()和get()方法  8.4.3 Session的update()方法  8.4.4 Session的saveOrUpdate()方法  8.4.5 Session的merge()方法  8.4.6 Session的delete()方法  8.4.7 Session的replicate()方法  8.5 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    8.4.2 Session的load()和get()方法 194 8.4.3 Session的update()方法 195 8.4.4 Session的saveOrUpdate()方法 197 8.4.5 Session的merge()方法 198 8.4.6 Session的delete()方法 200 8.4.7 Session的replicate...

    精通Hibernate:对象持久化技术第二版part3

    8.4.2 Session的load()和get()方法 194 8.4.3 Session的update()方法 195 8.4.4 Session的saveOrUpdate()方法 197 8.4.5 Session的merge()方法 198 8.4.6 Session的delete()方法 200 8.4.7 Session的replicate...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     8.4.2 Session的load()和get()方法  8.4.3 Session的update()方法  8.4.4 Session的saveOrUpdate()方法  8.4.5 Session的merge()方法  8.4.6 Session的delete()方法  8.4.7 Session的replicate()方法  8.5 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     8.4.2 Session的load()和get()方法  8.4.3 Session的update()方法  8.4.4 Session的saveOrUpdate()方法  8.4.5 Session的merge()方法  8.4.6 Session的delete()方法  8.4.7 Session的replicate()方法  8.5 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     8.4.2 Session的load()和get()方法  8.4.3 Session的update()方法  8.4.4 Session的saveOrUpdate()方法  8.4.5 Session的merge()方法  8.4.6 Session的delete()方法  8.4.7 Session的replicate()方法  8.5 ...

    hibernate教程

    - **访问器和变异器方法**:为实体类中的每个属性编写 getter 和 setter 方法。 - **默认构造函数**:实体类必须有一个默认构造函数。 - **标识符属性**:可选的标识符属性,用于唯一标识实体对象。 - **非最终类**...

    JAVA面试题目

    Hibernate中get()、load()、find()的区别。** - **解析:** `get()`、`load()`和`find()`是Hibernate提供的几种加载实体对象的方式: - **get()**:立即加载实体,如果找不到则抛出异常。 - **load()**:懒加载...

Global site tag (gtag.js) - Google Analytics