Session.get/load()
都是根据指定的实体类和id从数据库中读取记录,并返回与之对应的实体对象;
其区别:
- 如果在数据库里未发现所要查询的值,get()返回Null,而load()抛出ObjectNullFoundException异常;
- Load()方法可以返回实体的代理类实例,而get()永远直接返回实体类;
- Load()可以利用内部缓存和二级缓存的数据,而get()只在内部缓存中查找,如果没有则发出SQL去执行查询;
看一个最简单的数据加载:
TUser user = (TUser) session.load(TUser.class, new Integer(1));
session加载实体对象时,将经过哪些过程?
- 处于性能的考虑,Session在调用数据库查询功能之前,会先在缓存中查询,首先会根据实体类和id在内部缓存中查找;如果有值则返回它;
- 然后,Session会在当前"NonExists"记录中进行查找,如果“NonExists”记录中在同样的查询条件,则返回null;("NonExists"记录了当前session实例在之前所查询操作中,未能查到有效的数据查询条件[相当于一个黑名单查询列表],如此以来,如果session中一个无效的查询条件重复出现,即可迅速作出判断,获得更高性能);
- 对于Load()而言,如果内部缓存没有想要的值,那么继续在二级缓存中查询,如果有,则返回它;
- 如果在缓存中没能发现值,则发出SQL去执行查询操作,经过查询未发现对应记录,则将此次查询的信息记录到"NonExists";并返回null;
- 根据映射配置和SQL得到的ResultSet,创建对应的数据对象;
- 将其数据对象纳入当前Session实体管理容器(内部缓存)中;
- 执行Interceptor.onLoad方法(如果有对应的Interceptor);
- 将数据对象纳入二级缓存;
- 如果数据对象实现了lifeCycle接口,则调用数据对象的onLoad方法;
- 返回数据对象;
分享到:
相关推荐
15. <load-on-startup>1</load-on-startup> 16. </servlet> 17. <servlet-mapping> 18. <servlet-name>spring</servlet-name> <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来...
例如,使用 session.get() 或 session.load() 方法可以根据 OID 获取对象。 session.get(Customer.class, 1); 三、HQL 检索 HQL 是 Hibernate 最常用的检索方式,它支持所有 SQL 支持的检索方式。HQL 是一种面向...
今天小编就为大家分享一篇关于Hibernate中Session.get()方法和load()方法的详细比较,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库
这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...
//该方法会立即加载/获取数据(只要调用该方法就会立即向数据库发出查询语句),该方法只在内部缓存查找数据,如果内部缓存中没有数据就直接去数据库查询,当数据库中没有要查询的数据时返回null (6).load(Class ...
Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别。 1. get() 使用get()来根据ID进行单条查询: User user=session.get(User.class, "1"); 当get()方法被调用的时候...
2. 通过标识符检索:使用 session.get() 方法或 session.load() 方法根据标识符检索对象。 3. 使用 HQL 检索对象:使用 Hibernate 查询语言 HQL 检索对象。 4. 使用 Hibernate 条件 API:提供了类型安全的面向对象的...
当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级...
hibernate数据的并发控制,及hibernate中的session.get()与session.load()方法异同
1. get() and load() Java代码 session.get(Clazz, id); session.load(Clazz, id); session.get(Clazz, id); session.load(Clazz, id); 说明: load()与get()的区别 请注意如果没有匹配的数据库记录,load()方法可能...
在Hibernate中使用两极缓存结构,第一级缓存是Session级别的缓存,Session级别的缓存是由Hibernate管理的,一般情况下无需进行干预.第二级缓存是 SessionFactory级别的缓存,SessionFactory级的缓存可以进行配置和...
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 ...
Session.load() 和 Session.get() 都可以根据指定的实体类和 id 从数据库读取记录,并返回与之对应的实体对象。其区别在于,如果未能发现符合条件的记录,get 措施返回 null,而 load 措施会抛出一种 ...
get()/load():从数据库中还原数据 get: 1.先从缓存中进行查找,如果找到就直接返回 2.如果找不到,get()会立即发送sql语句到数据库中查找数据,如果找到就返回,如果找不到返回null; load:(使用延迟加载策略) 1....
而本质上,当我们调用某H框架的session.get、session.load、session.delete时,我们是想传递一个以对象形式表达的数据库操作请求。只不过某H框架要求(并且限制)我们将其视作纯粹的“单个”对象而已。JPA 2.0为了...
04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_...
16、下面的代码有什么不妥之处? ............................................................................... 14 17、请说出作用域 public,private,protected,以及不写时的区别 ...........................