hibernate可通过get()和load()获取对象,而他们又有所不同。
1、如果未能找到符合条件的记录,get()方法返回null(NullPointException异常),而load()将会报ObjectNotFountException
2、load()方法返回实体的代理类,而get()永远只返回实体类
3、load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接sql查询
上面三条算是网上的“标准”答案,因为大都这么说。
在其他博客里看到一评论说,这三条说的都不太标准。在此也不在赘述了...只说了一条根本的区别:
一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;
而对于get方法 hibernate一定要获取到真实的数据,否则返回null.
load()是等真正用到对象时才发sql语句,而get()直接从数据库加载 不会延迟
通过打印*.getClass来判断是实体类还是代理类
get()方法
class com.itmyhome.model.Student
load()方法
class com.itmyhome.model.Student_$$_javassist_0
可见load()返回的是代理类。
分享到:
相关推荐
get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库
hibernate中get和load的区别共5页.pdf.zip
NULL 博文链接:https://811417208-qq-com.iteye.com/blog/506950
NULL 博文链接:https://ysj5125094.iteye.com/blog/1897557
get和load方式是根据id取得一个记录 下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来。 1.从返回结果上对比: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法...
Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别。 1. get() 使用get()来根据ID进行单条查询: User user=session.get(User.class, "1"); 当get()方法被调用的时候...
NULL 博文链接:https://cici9898-007.iteye.com/blog/1847710
NULL 博文链接:https://quicker.iteye.com/blog/658451
博文链接:https://log-cd.iteye.com/blog/205166
今天小编就为大家分享一篇关于Hibernate中Session.get()方法和load()方法的详细比较,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的
Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略
2. 通过标识符检索:使用 session.get() 方法或 session.load() 方法根据标识符检索对象。 3. 使用 HQL 检索对象:使用 Hibernate 查询语言 HQL 检索对象。 4. 使用 Hibernate 条件 API:提供了类型安全的面向对象的...
Hibernate 难点解析: hibernate中uuid和...Hibernate get与load的区别 hibernate二级缓存中list和iterator的用法 Hibernate中的对象有三种状态: lock和update区别 save 和update区别 update 和saveOrUpdate区别
04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_...
Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用...
//该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...