hibernate里load方法和get方法的区别
2010-08-20 16:51
225 查看
转载于:http://chillwarmoon.javaeye.com/blog/99440
关键字: hibernate load get 区别
网上有许多关于load和get方法的讨论,自己做了一个小小的实验,明确一下load和get方法的工作原理。首先get方法没有什么可说的,就是在Session执行此函数的时候hit一下数据库,而load方法比较麻烦,具体的执行流程是这样的:
java 代码
Session session=getSessionFactory().openSession();
Transaction tr=session.beginTransaction();
//Student stu2=(Student)session.get(Student.class, new Integer(5));
//if(session.contains(stu2)) System.out.println("stu2 in the session");
Student stu=(Student)session.load(Student.class, new Integer(5));
stu.getAddress();
tr.commit();
session.close();
(1)查找Session所在的persistent Context中是否有缓存的persistent object,如果有则直接返回该persistent object作为stu对象;如果没有,则需要建立代理对象,该代理对象不是我们认为的pojo,其中的代理对象的initialized属性为false,target属性为null。
(2)在访问获得的代理对象的属性时,例如执行stu.getArress()时,因为此时的persistent Context中没有该persistent object,所以会hit数据库。
(3)hit数据库时,如果在数据库中找到该对象对应的记录,那么用获得的对象赋值给该代理对象的target属性,并且将initialized属性改为true;如果在数据库中找不到该对象对应的记录,那么抛出org.hibernate.ObjectNotFoundException异常。
而get方法每次执行都hit数据库,如果没有相对应的记录,那么就返回null。
=======================
两加载方法区别:
区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException;
区别2:load支持延迟加载,get不支持延迟加载。
相关文章推荐
- hibernate持久化方法get和load的区别
- hibernate中get方法和load方法的根本区别
- hibernate读取数据库里内容,session的get方法和load方法的区别
- Hibernate中get和load方法的区别
- Hibernate加载数据时get和load方法的区别
- Hibernate用于测试refresh的方法、get和load的区别、测试persist和save的区别
- hibernate get/load方法区别
- 对象的三种状态(hibernate的session的get和load方法的区别,session的常用方法,session缓存)
- Hibernate中get和load方法的区别
- hibernate 的get()和load()方法区别
- Hibernate中get和load方法的区别
- Hibernate中get方法和load方法的区别
- 详解Hibernate中get和load方法的区别
- Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别
- hibernate:get和load方法的区别
- hibernate里load方法和get方法的区别
- Hibernate中get和load方法的区别
- hibernate load与get方法的区别
- Hibernate中get和load方法的区别
- Hibernate中Session之get和load方法的真正区别