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之类的延迟加载过。返回的是原先代理对象,而不是实体对象。如果该代理对象还没有加载实体数据,那么会查询二级缓存或数据库,返回的还是代理对象(已加载数据的代理对象)
相关推荐
例如,使用save()或saveOrUpdate()方法插入数据,使用get()或load()方法加载数据,使用update()或merge()方法更新数据,使用delete()方法删除数据。 6. **HQL和Criteria查询**: Hibernate提供了自己的查询语言HQL,...
这篇“Hibernate3.6中文API帮助文档”提供了详尽的指引,帮助开发者更好地理解和应用Hibernate 3.6版本的功能。 一、Hibernate概述 Hibernate通过提供数据持久化层,简化了Java应用程序与数据库之间的交互。它通过...
6. **CRUD操作**:通过Session对象,可以实现对数据库的基本操作,如`save()`, `update()`, `delete()`和`load() / get()`。 7. **查询**:Hibernate支持HQL(Hibernate Query Language)和 Criteria API 进行查询...
在Hibernate 3.6 版本中,开发者可以享受到更加稳定和高效的数据库操作体验。这篇文章将带你初识Hibernate 3.6,了解其基本概念、配置以及如何进行简单的数据操作。 1. **对象关系映射(ORM)**:ORM 是一种编程...
源码中的`SessionImpl`类实现了该接口,我们可以看到诸如`save()`, `update()`, `delete()`, `get()`, `load()`等方法的实现细节。 3. **Criteria API**:在Hibernate 3.6.1中,Criteria API提供了一种类型安全的...
标题中的“HIBERNATE3.6 MYSQL无错版配置文件及主程序范例”意味着我们将探讨关于Hibernate 3.6版本与MySQL数据库的集成配置,以及如何编写一个无错误的主程序示例。这个主题涵盖了Java持久层框架Hibernate的核心...
本示例将带你逐步了解如何使用Hibernate3.6进行数据库操作。 首先,我们需要理解Hibernate的核心概念。Hibernate提供了一个对象关系映射(ORM)机制,允许我们将Java类与数据库表进行映射,这样我们就可以通过操作...
在开发过程中,可以通过多种方式参与到Hibernate社区中,例如提交bug报告、提出改进意见或贡献代码等。社区的活跃成员还包括Hibernate团队和JBoss视觉设计团队。 #### 三、入门指南 ##### 1. 数据库访问 ###### ...
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 ...
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...
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...
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 ...
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 ...
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 ...
- **访问器和变异器方法**:为实体类中的每个属性编写 getter 和 setter 方法。 - **默认构造函数**:实体类必须有一个默认构造函数。 - **标识符属性**:可选的标识符属性,用于唯一标识实体对象。 - **非最终类**...
Hibernate中get()、load()、find()的区别。** - **解析:** `get()`、`load()`和`find()`是Hibernate提供的几种加载实体对象的方式: - **get()**:立即加载实体,如果找不到则抛出异常。 - **load()**:懒加载...