关于Hibernate的批量检索,批量更新和批量删除,所执行的操作并不尽遵循相同的规律。这一点使目前的Hibernate2.0还显得有些不够规格
化和强健。但以后的版本中,期望其可以突破这几个屏障。

首先说明批量查询,我们已经了解到,Session 的load(), get() , find() 方法都可实现对业务数据的查询,其中load()会因所要查询
的对象类的映射文件(比如Customer.hbm.xml文件)中设置的检索策略,而实现立即检索或延迟检索。get()方法和find()方法却不受这种
控制,它们总是会执行立即检索。那么象load()这样的方法,当其被设置为使用延迟检索时,它会返回什么样的实例呢?当使用延迟检索
时返回为这一对象的代理类实例,代理类实例也有一个标志性的OID, 但没有被实例化,其所有属性为默认初始值或为空。关于延迟检索
和对象类的映射方式,这里不做多余解释。提到检索,load() 和get()方法都是用指定了OID的方式检索并返回一个与数据库中记录相对
应的实例对象。如Customer customer = (Customer)session.get(Customer.class, new Long(1)) 将会返回一个Customer实例对象customer. 而 find()可以实现批量的检索,其返回类型为List的对象集合。例如:

List customerList = session.find( “from Customer as  c”);

注意,其中的”from Customer as c” 为HQL查询语句, Customer 并不是象普通的SQL语句中对表名的引用那样可以对大小写不敏感,这里
的查询是基于对象类的,Customer为待查询的对象类,你要写正确你的类名,c是你为这个类在这里所取的别名。Hibernate是通过你对
Customer这个对象类的映射文件Customer.hbm.xml中的设置得知此对象类与哪一个表对应。它可能正是对应了CUSTOMERS这个表。那么
Hibernate又如何知道你所用的对象类与表的映射,到底是哪一个数据库中的表呢?这个对数据库名的映射是在Hibernate的配置文件
hibernate.cfg.xml文件中给出的。相关的一些问题请查阅Hibernate的配置和映射章节。

Load(): 另一种读取数据的方法,和get的区别是: 1.异常处理: load有异常处理,get没有,它返回null,2.get从数据库读数据,load可能去读缓冲区。

如果未能发现符合条件的记录,Hibernate get方法返回null,而load方法会抛出一个ObjectNotFoundException。

find,iterator
(1)iterator首先会获取符合条件的记录的id,再跟据id在本地缓存中查找数据,查找不到的再在数据库中查找,结果再存在缓存中。N+1条SQL。
(2)find跟据生成的sql语句,直接访问数据库,查到的数据存在缓存中,一条sql。如果找不到符合条件的纪录,get()方法将返回null.
如果找不到符合条件的纪录,find()方法将返回null.
如果找不到符合条件的纪录,load()将会报出ObjectNotFoundEcception.get()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询 .
find()方法会忽略二级缓存,若内部缓存没有查询到会到数据库中去查询 .
load()方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据 .get()方法返回真实的实体类 .
find()方法返回真实的实体类 .
load()方法可以返回实体的代理类 .load()会因所要查询的对象类的映射文件中设置的检索策略,而实现立即检索或延迟检索。
get()方法和find()方法却不受这种控制,它们总是会执行立即检索。
别get与find了,在以后的版本中find方法就消失了。
说说get与load吧
get如果查询不到对象,返回null
load找不到对象,
建议用get

转载于:https://blog.51cto.com/yjm199/1687552

Hibernate,get,load,find方法解析相关推荐

  1. php 执行 load database,phpcms实用的pc_base::load调用方法解析

    在博主初次接触phpcms是对pc_base::load是比较懵的,不知道调用的是哪个文件,博主对PHP实例化还是比较熟悉的,所以找到文件之后归类了下: //数据库类型 pc_base::load_m ...

  2. hibernate中load和get方法的区别 lazy的策略

    1  get不支持lazy   load支持lazy 2  采用get加载数据时,如果无匹配数据则返回null         load则报异常 --------------------------- ...

  3. Hibernate HQL的update方法详解

    虽然hibernate提供了许多方法对数据库进行更新,但是这的确不能满足开发需要.现在讲解一下用hql语句对数据进行更新. 不使用参数绑定格式String hql="update User ...

  4. java修改文件的大小限制_Struts2修改上传文件大小限制方法解析

    首先struts上传最大大小由两个地方决定. struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的defau ...

  5. hibernate get() load() 区别

    来源:互联网 1.hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate 认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用 ...

  6. React源码解毒 - render方法解析

    render方法解析 要将react元素渲染到页面当中,分为了两个阶段: render阶段 和 commit阶段. render阶段:由协调层负责的阶段 在这个阶段当中要为每一个react元素构建对应 ...

  7. swift:使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据

    在我的博客(下面)两个实验的基础上,使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据,参照视频实现的"天气信息"小实验 1 创 ...

  8. Peer J:整合高通量绝对丰度定量方法解析土壤细菌群落及动态

    本文转自"上海天昊生物",已获授权 英文题目: Assessing soil bacterial community and dynamics by integrated high ...

  9. leaq c 汇编语言,汇编语言lea指令使用方法解析

    这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 ...

最新文章

  1. 我国医疗机器人产业发展特征分析
  2. spring cloud面试
  3. window 如何查看tomcat 实时日志_如何处理生产环境Tomcat的catalina.out日志?
  4. iBATIS sql中的处理特殊符号的做法
  5. gmat阅读.html,GMAT阅读方法之——抽象词提炼
  6. Spring Batch系列总括(转载)
  7. linux java 文件上传到服务器_java代码实现文件上传到linux服务器及问题汇总及解决...
  8. 深度学习落地项目 呼叫中心系统
  9. 博饼游戏c语言,2015中秋博饼游戏规则
  10. 1044: 不及格率 Python
  11. RTL8367学习笔记1——基础知识
  12. 2.1 随从图标的创建———自制卡牌游戏之旅
  13. 硬件:Nand Flash、Nor Flash
  14. 【行人轨迹预测数据集——ETH、UCY】
  15. Java非静态变量给静态变量赋值
  16. Java内存区域和GC机制
  17. keil rt-thread link.sct 解析
  18. 哪种ftp服务器最稳定,ftp服务器软件,推荐三款值得推荐的ftp服务器软件
  19. Java Web应用开发——作业三
  20. 无人驾驶常用传感器及其作用概述

热门文章

  1. hive 中文comment乱码解决
  2. php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
  3. 如何优化计算机网络课程,计算机论文:探究如何优化计算机网络课程教学方法.docx...
  4. java enum变量_java enum
  5. 倒排索引原理_拜托,面试请不要再问我分布式搜索引擎的架构原理!
  6. vue 用key拿对象value_vue对象添加属性(key:value)、显示和删除属性
  7. python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...
  8. php更新点击数,始终如一的坚守,PHP对数据更新的更优解
  9. 怎么使一个浮点数删除小数部分C语言,如何得出一个浮点数的小数部分,要把各个位保存到一个数组里边。...
  10. 一道指针压轴笔试题讲解 (进阶指针必看)