Hibernate,get,load,find方法解析
关于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方法解析相关推荐
- php 执行 load database,phpcms实用的pc_base::load调用方法解析
在博主初次接触phpcms是对pc_base::load是比较懵的,不知道调用的是哪个文件,博主对PHP实例化还是比较熟悉的,所以找到文件之后归类了下: //数据库类型 pc_base::load_m ...
- hibernate中load和get方法的区别 lazy的策略
1 get不支持lazy load支持lazy 2 采用get加载数据时,如果无匹配数据则返回null load则报异常 --------------------------- ...
- Hibernate HQL的update方法详解
虽然hibernate提供了许多方法对数据库进行更新,但是这的确不能满足开发需要.现在讲解一下用hql语句对数据进行更新. 不使用参数绑定格式String hql="update User ...
- java修改文件的大小限制_Struts2修改上传文件大小限制方法解析
首先struts上传最大大小由两个地方决定. struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的defau ...
- hibernate get() load() 区别
来源:互联网 1.hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate 认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用 ...
- React源码解毒 - render方法解析
render方法解析 要将react元素渲染到页面当中,分为了两个阶段: render阶段 和 commit阶段. render阶段:由协调层负责的阶段 在这个阶段当中要为每一个react元素构建对应 ...
- swift:使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据
在我的博客(下面)两个实验的基础上,使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据,参照视频实现的"天气信息"小实验 1 创 ...
- Peer J:整合高通量绝对丰度定量方法解析土壤细菌群落及动态
本文转自"上海天昊生物",已获授权 英文题目: Assessing soil bacterial community and dynamics by integrated high ...
- leaq c 汇编语言,汇编语言lea指令使用方法解析
这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 ...
最新文章
- 我国医疗机器人产业发展特征分析
- spring cloud面试
- window 如何查看tomcat 实时日志_如何处理生产环境Tomcat的catalina.out日志?
- iBATIS sql中的处理特殊符号的做法
- gmat阅读.html,GMAT阅读方法之——抽象词提炼
- Spring Batch系列总括(转载)
- linux java 文件上传到服务器_java代码实现文件上传到linux服务器及问题汇总及解决...
- 深度学习落地项目 呼叫中心系统
- 博饼游戏c语言,2015中秋博饼游戏规则
- 1044: 不及格率 Python
- RTL8367学习笔记1——基础知识
- 2.1 随从图标的创建———自制卡牌游戏之旅
- 硬件:Nand Flash、Nor Flash
- 【行人轨迹预测数据集——ETH、UCY】
- Java非静态变量给静态变量赋值
- Java内存区域和GC机制
- keil rt-thread link.sct 解析
- 哪种ftp服务器最稳定,ftp服务器软件,推荐三款值得推荐的ftp服务器软件
- Java Web应用开发——作业三
- 无人驾驶常用传感器及其作用概述
热门文章
- hive 中文comment乱码解决
- php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
- 如何优化计算机网络课程,计算机论文:探究如何优化计算机网络课程教学方法.docx...
- java enum变量_java enum
- 倒排索引原理_拜托,面试请不要再问我分布式搜索引擎的架构原理!
- vue 用key拿对象value_vue对象添加属性(key:value)、显示和删除属性
- python垂直输出hello_python - 我如何获得直方图以垂直输出数据? - SO中文参考 - www.soinside.com...
- php更新点击数,始终如一的坚守,PHP对数据更新的更优解
- 怎么使一个浮点数删除小数部分C语言,如何得出一个浮点数的小数部分,要把各个位保存到一个数组里边。...
- 一道指针压轴笔试题讲解 (进阶指针必看)