1、当数据库不存在对应ID数据时,调用load()方法将会抛出ObjectNotFoundException异常,get()方法将返回null。
2、当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作。当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。
3、load()和get()都会先从Session缓存中查找,如果没有找到对应的对象,则查询Hibernate二级缓存,再找不到该对象,则发送一条SQL语句查询。
如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个
ObjectNotFoundException。
Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取
分享到:
相关推荐
### Session的Get与Load方法比较 在对象关系映射(ORM)框架中,如Hibernate,开发者经常需要通过Session对象来加载或获取实体对象。本文将深入探讨`get`与`load`两种方法的区别及其应用场景。 #### 一、基本概念 ...
### Hibernate中的Get与Load方法详解 #### 概述 在Hibernate框架中,`get`与`load`方法都是用于从数据库加载实体对象的常用手段。然而,这两种方法在实现细节上有着本质的区别,这些差异主要体现在对缓存的利用、...
在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,让我们来深入了解一下`get`...
`load`和`get`方法是Hibernate中用于检索实体的两种主要方式,它们都是从Session接口中调用,但有明显的区别和各自的适用场景。 1. `load`方法: - `load`方法主要用于根据主键加载对象,它返回一个代理对象,而...
本篇文章将详细解析Hibernate中的三种主要查询方式——HQL(Hibernate Query Language)、Criteria API和Query API,并着重讨论`load()`与`get()`方法的区别。 一、HQL查询 Hibernate Query Language(HQL)是...
- `load`方法的执行则更为复杂,它首先检查Session的持久化上下文(persistent Context)中是否存在缓存,如果有则直接返回。如果不存在且不是懒加载(lazy loading),则直接查询数据库。如果是懒加载,`load`会...
此外,`get`方法在找不到对应对象时会返回`null`,这是它与`load`的一个重要区别。 相对地,`load`方法则是延迟加载(Lazy Loading)的代表,它并不立即执行SQL查询,而是返回一个代理对象。只有当真正访问代理对象...
它们都是用来根据主键ID查询数据库中的实体对象,但两者在执行机制和返回结果上有显著的区别。 1. `get()`方法 当调用`session.get()`时,Hibernate会立即执行SQL查询,从数据库中查找指定ID的对象。例如,对于...
在Hibernate框架中,`load()`和`get()`都是用于从数据库中检索对象的方法,但它们在功能和行为上存在显著的差异。理解这些差异对于优化应用程序的性能和处理潜在异常至关重要。 首先,`load()`方法执行延迟加载策略...
Hibernate中Session.get()方法和load()方法是两个常用的数据访问方法,但它们之间有着本质的区别。 首先,从返回值上看,get()方法直接返回实体类,如果查不到数据则返回null。load()方法则返回一个实体代理对象,...
在Hibernate框架中,`get` 和 `load` 都是用来从数据库中获取对象的方法,但它们之间存在一些关键差异。了解这些差异对于高效地使用Hibernate至关重要。 首先,让我们来看看这两个方法的基本用法: 1. `get` 方法...
【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对...
查询是通过Session的get()、load()或 Criteria/Query API来实现的。get()和load()主要用于根据主键获取对象,Criteria和Query API则提供更复杂的查询能力,如条件查询、分页查询、排序等。 二、自定义Session 在...
通过Session的get()或load()方法获取的对象默认处于此状态。 - **游离状态(Detached)**:对象曾经是持久化的,但当前未与任何Session关联。对象在游离状态下可以被重新持久化。 2. **对象持久化操作**: - **...
4. `load()`和`get()`:用于根据主键加载对象,前者如果对象不存在则抛出异常,后者返回null。 5. `query()`和`createCriteria()`:创建查询或Criteria查询,用于检索数据。 接下来,我们探讨`Transaction`。在...
Session 负责所有与数据库交互的工作,包括管理持久化对象的生命周期,并通过提供第一级别的高级缓存来确保持久化对象的数据与数据库保持同步。 **2. Session的特点** - **单线程性**: Session 是单线程、非共享的...
然而,它有一个显著的区别:load()方法会立即创建一个代理对象,即使数据库中没有对应的数据。这是因为当调用load()时,它假设对象一定存在,如果实际上不存在,将会抛出ObjectNotFoundException异常。load()方法...
Ajax请求session超时处理流程 java服务器端处理: SessionValidateFilter中修改: if (ServerInfo.isAjax(request)) { request.setAttribute("statusCode", 301); request.setAttribute("message", "Session ...
例如,save()或saveOrUpdate()用于保存对象到数据库,update()用于更新对象,delete()用于删除对象,而load()或get()用于根据主键获取对象。 5. **查询语言**:Hibernate支持HQL(Hibernate Query Language)和...
8. **session.get()** - 类似于load(),但当对象不存在时返回null,而不是抛出异常。 9. **session.delete()** - 删除缓存中的对象,并在事务提交时执行删除操作。`session.delete(customer)`会删除与customer关联...