Session中load和get
一、get不支持lazy,load支持lazy。
二、采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常。
三、执行load()时,先从Session查找当前的对象是否存在,如果不存在,则从数据库中去查询,如果不存在这条记录,则扔异常;执行get()的时候,不论Session中是否存在当前对象,直接从数据库中去查询,如果不存在,则返回null。
四、load()方法可以返回实体的代理类实例,而get()永远只返回实体类.
get的例子:
1public void testGetMethod() {
2 Session session = null;
3 try {
4 session = HibernateUtils.getSession();
5 session.beginTransaction();
6
7 //马上发出查询sql,加载User对象
8 User user = (User)session.get(User.class, "402880d01b9bf210011b9bf2c2ff0002");
9 System.out.println("user.name=" + user.getName());
10
11 user.setName("张三");
12 session.getTransaction().commit();
13 }catch(Exception e) {
14 e.printStackTrace();
15 session.getTransaction().rollback();
16 }finally {
17 HibernateUtils.closeSession(session);
18 }
19 }
PS:在执行第8行语句的时候,如果数据库有相关的记录,则立刻发出sql语句,即使是没有第9行中user.getName()方法调用,如果没有匹配的记录则返回来一个null。
load方法例子:
1public void testLoadMethod() {
2 Session session = null;
3 try {
4 session = HibernateUtils.getSession();
5 session.beginTransaction();
6
7 //不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
8 //延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
9 //hibernate延迟加载实现原理是代理方式
10 User user = (User)session.load(User.class, "402880d01b9bf210011b9bf2b2ff0002");
11 System.out.println("user.name=" + user.getName());
12 user.setName("李四");
13 session.getTransaction().commit();
14 }catch(Exception e) {
15 e.printStackTrace();
16 session.getTransaction().rollback();
17 }finally {
18 HibernateUtils.closeSession(session);
19 }
20 }
PS:在执行到10句代码的时候并没有立刻发出sql语句,由于load实现了lazy延迟加载,延迟加载只有真正使用该对象的时候才进行加载,发出sql语句,关键是11句代码。如果load方法里面的id在数据库表里面没有相关的,则会发出ObjectNotFoundException 异常。
PS:可以通过设置断点,用debug来跟踪相关变量跟对象的改变,这样就可以很清晰理解load和get这两个方法。
分享到:
相关推荐
在Hibernate中,`Session`接口提供了`get`和`load`两种方法来获取数据库中的实体对象。 1. **get** 方法:尝试从当前Session的缓存中获取指定ID对应的实体对象;如果缓存中不存在,则直接执行SQL查询语句从数据库中...
1. **缓存查询流程**:`load`方法在尝试获取对象时,首先会检查当前Session的一级缓存中是否存在该对象。如果不存在,则不会立即查询数据库,而是创建一个代理对象(Proxy)。这个代理对象只包含了主键信息(OID)。...
`load`和`get`方法是Hibernate中用于检索实体的两种主要方式,它们都是从Session接口中调用,但有明显的区别和各自的适用场景。 1. `load`方法: - `load`方法主要用于根据主键加载对象,它返回一个代理对象,而...
本篇文章将详细解析Hibernate中的三种主要查询方式——HQL(Hibernate Query Language)、Criteria API和Query API,并着重讨论`load()`与`get()`方法的区别。 一、HQL查询 Hibernate Query Language(HQL)是...
在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,让我们来深入了解一下`get`...
在Hibernate框架中,`get`和`load`都是用于从数据库中检索持久化对象的方法,但它们在工作原理和使用场景上存在着显著的区别。本文将深入探讨这两个方法的差异,并结合实际应用进行详细阐述。 首先,`get`方法是...
在Hibernate框架中,Session是与数据库交互的主要接口,它提供了多种方法来操作对象的状态和数据。本文主要讨论了`get`、`load`方法以及`flush`、`clear`、`evict`等方法的区别。 首先,让我们关注`get`和`load`的...
在Hibernate ORM框架中,获取持久化对象的两种主要方法是`get()`和`load()`。它们都是用来根据主键ID查询数据库中的实体对象,但两者在执行机制和返回结果上有显著的区别。 1. `get()`方法 当调用`session.get()`...
"Hibernate中Session.get()方法和load()方法的详细比较" Hibernate中Session.get()方法和load()方法是两个常用的数据访问方法,但它们之间有着本质的区别。 首先,从返回值上看,get()方法直接返回实体类,如果查...
在Hibernate框架中,`load()`和`get()`都是用于从数据库中检索对象的方法,但它们在功能和行为上存在显著的差异。理解这些差异对于优化应用程序的性能和处理潜在异常至关重要。 首先,`load()`方法执行延迟加载策略...
3. `get()` 和 `load()`: `get()`根据主键获取对象,如果对象不存在,返回null;`load()`同样用于获取对象,但如果对象不存在,会抛出异常。`load()`在延迟加载机制中更为常用。 4. `query()`: 通过HQL(Hibernate ...
在Hibernate框架中,`get` 和 `load` 都是用来从数据库中获取对象的方法,但它们之间存在一些关键差异。了解这些差异对于高效地使用Hibernate至关重要。 首先,让我们来看看这两个方法的基本用法: 1. `get` 方法...
4. `load()`和`get()`:用于根据主键加载对象,前者如果对象不存在则抛出异常,后者返回null。 5. `query()`和`createCriteria()`:创建查询或Criteria查询,用于检索数据。 接下来,我们探讨`Transaction`。在...
get()和load()主要用于根据主键获取对象,Criteria和Query API则提供更复杂的查询能力,如条件查询、分页查询、排序等。 二、自定义Session 在实际开发中,为了满足特定需求,有时我们需要对Hibernate的默认Session...
- **加载和检索**:使用`get()`或`load()`方法可以加载一个实体,如果对象存在于数据库,Hibernate将返回一个对应的代理对象。 - **保存和插入**:`save()`方法用于将瞬时对象转换为持久化对象,而`persist()`方法...
8. **session.get()** - 类似于load(),但当对象不存在时返回null,而不是抛出异常。 9. **session.delete()** - 删除缓存中的对象,并在事务提交时执行删除操作。`session.delete(customer)`会删除与customer关联...
例如,save()或saveOrUpdate()用于保存对象到数据库,update()用于更新对象,delete()用于删除对象,而load()或get()用于根据主键获取对象。 5. **查询语言**:Hibernate支持HQL(Hibernate Query Language)和...
通过Session的get()或load()方法获取的对象默认处于此状态。 - **游离状态(Detached)**:对象曾经是持久化的,但当前未与任何Session关联。对象在游离状态下可以被重新持久化。 2. **对象持久化操作**: - **...
- **轻量化**: Session 实例非常轻量,其创建和销毁的成本较低。在设计系统时,可以考虑为每个请求分配一个 Session 实例,并在请求结束后及时关闭该 Session。 - **缓存机制**: Session 内部维护了一个缓存,用于...
本教程聚焦于Hibernate中的Session接口以及get、load、persist这三个常用的方法,它们是 Hibernate 实现对象-关系映射(ORM)的核心组件。 首先,我们来理解Session接口。Session在Hibernate中扮演着数据库连接的...