hibernate get和load的区别
来源:互联网 发布:linux下源码搭建lamp 编辑:程序博客网 时间:2024/05/21 01:31
hibernate中用于获取数据的方法分成2种分类:
1.加载方式的区别:
1).立刻加载方法:get
所谓的立刻加载就是只要缓存中没有这条记录,就立刻查询数据库
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
System.out.println("1: "+session);
session.beginTransaction();
Books b1=(Books)session.get(Books.class, 2);
System.out.println("2: "+session);
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
}
}
执行了以下sql语句:
Hibernate:
select
books0_.id as id0_0_,
books0_.name as name0_0_,
books0_.price as price0_0_,
books0_.opendate as opendate0_0_,
books0_.enddate as enddate0_0_,
books0_.author as author0_0_
from
test.books books0_
where
books0_.id=?
通过session获取一个对象后,这个对象会进入session缓存中托管,目的是希望重用数据,这其实就是hibernate中
所谓的1级缓存(session级别缓存)
2).延迟加载方法:load(慎用,如果在session关闭后才有“必须”查询点就会出现异常)
所谓的延迟加载就是在调用方法的时候并没有立刻查询数据库,而是等待“必须”查询点,load的时候只是返回了一 个proxy对象,这个代理对象中只有id,不管这个id在数据库中是否存在都会返回一个代理对象。没有其他数据,只 有在触发必须查询点时才查询数据库。
Books b1=(Books)session.load(Books.class, 2);
此时b1对象中只有id值为2,只有查询b1对象的其他属性时(例如:b1.getName())才查询数据库,执行sql语句
2.get假如获取不到具体的数据,接着对对象进行操作,报空指针异常
Exception in thread "main" java.lang.NullPointerException
at com.test.Test2.main(Test2.java:24)
load假如获取不到具体的数据,接着对对象操作,会报org.hibernate.ObjectNotFoundException异常
3.get对1级缓存可读可写,即查询一次然后将查询结果放入session缓存中,之后便可直接使用缓存中的数据
load对1级缓存也是可读可写
- Hibernate的get和load的区别
- Hibernate的get和load的区别
- Hibernate的get和load的区别
- hibernate的load和get的区别
- hibernate的load()和get()的区别
- hibernate的load()和get()的区别
- Hibernate中load和get的区别
- Hibernate load()和get()的区别
- Hibernate get()和load() 的区别
- Hibernate中get和load的区别
- Hibernate中get和load的区别
- Hibernate之get和load的区别
- hibernate的get() load() 和find()区别
- hibernate load 和 get 的一点区别
- hibernate中get和load的区别
- Hibernate中get和load的区别
- hibernate 中get()和load()的区别
- hibernate load和get的区别
- Xocde5 取消ARC
- Android ZXing 二维码
- 分析在MFC正规dll中使用资源的方法
- 通过LeakDiag查看内存泄漏
- bootm
- hibernate get和load的区别
- mysql grant all on
- poj 1193 内存分配
- 对svn中Switch的理解
- Ubuntu 12.04 64位编译android 4.1.1_r3
- OpenGL ES2学习笔记(5)-- 画线
- ORACLE AWR使用
- openCv2.3.1与vs2005
- 利用mkfs.ubifs和ubinize两个工具制作UBI镜像