hibernate中get和load的理解

hibernate中查询时,有get和load两种方法,但两者有一些不同,说说我的理解。

get是直接从数据库中查询,而load是缓存。

比如,getBean表示get方法查到的对象,loadBean表示load方法查到的对象。

在getBean中,该对象中所有的属性,已经全部封装完毕了;

但是loadBean中,只封装了该对象的id,其他的值还没有封装,要等到我们去调用这些值的是,才会去数据库中查出来封装进去。

所以,getBean中的属性,我们可以随时调用;

但是loadBean中的属性,我们调用时,很可能报no session的异常,因为这个时候,loadBean才去连接数据库,但是session在我们持久层方法结束的时候,已经关闭。没有连接,所以查不到。

时间: 2024-08-24 22:33:40

hibernate中get和load的理解的相关文章

Hibernate中get()和load()的区别

Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: User user=session.get(User.class, "1"); 当get()方法被调用的时候就会立即发出SQL语句: Hibernate: select user0_.ID as ID1_1_0_, user0_.CREATETIME as CREATETI2_1_0_, user0_.UPDAT

【hibernate】Hibernate中get()和load()的区别

Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: 1 User user=session.get(User.class, "1"); 当get()方法被调用的时候就会立即发出SQL语句: 1 2 3 4 5 6 7 8 9 10 11 Hibernate:     select         user0_.ID as ID1_1_0_,         use

Hibernate中get和load的区别

在Hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的. 一.load方法 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保

Hibernate中get()和load()方法的区别

在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的. 一.load加载方式 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出SQL语句,当前得到的这个对象其实是一个代理对象,这个代理对象

hibernate中get和load区别

在日常开发中,获取数据时必不可少的,这样就要用到get和load方法来实现了.下面简单说一下get和load的区别. 1.返回值不同 使用get方法检索数据时,没有该数据返回值为null. 而使用load方法时,则返回org.hibernate.ObjectNotFoundException异常,如下: 2.检索机制不同 get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没

Hibernate 中get()与load()方法的区别

一.get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回null 而使用load方法的话,hibernate会认定该id对应的数据一定存在,它也会先去session缓存中去查找,如果没有找到,hibernate会根据lazy属性值来确定

SHOP++ 中 hibernate中get()与load()的区别

这是我最近看shop++4.0 源码 体会到的一些东西,因为要做二次开发,所以先记录下来. 1.使用load()方法:         hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,使用代理来延迟加载该对象.在用到对象中的其他属性数据时才查询数据库,如果数据库中不存在该条记录,此时会抛异常,load方法抛异常是指在使用该对象的数据(调用get()方法获取属性)时,当数据库中不存在该数据时,才抛出异常,而不是在创建这个对象时.由于session缓存问题,在load时会

Hibernate中get和load

首先观察这样一个实验  Student stu=(Student) session.get(Student.class, 1); //切换这个位置  System.out.println("--------------------------------我是华丽丽的风格线----------------------------------------------------");  System.out.println(stu.getStuName()); 当使用load方法来得到一个

详解Hibernate中的NoSession问题

1.前言 今天在整合SSH框架的时候,当在表现层调用bean层查找数据的时候,报错,具体如下所示 根据字面上的意思,应该是代理不能被初始化,session已经关闭,这篇博客就来解决一下这个问题. 2.NoSession问题 1.原因分析 当执行Session的load()方法时,Hibernate不会立即执行查询CUSTOMERS表的select语句,仅仅返回Customer类的代理类的实例,这个代理类具由以下特征: (1)由Hibernate在运行时动态生成,它扩展了Customer类,因此它