了解get和load的区别?
* get不支持lazy,load支持lazy
* 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常
java 代码
- Session session=getSessionFactory().openSession();
- Transaction tr=session.beginTransaction();
-
-
- 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。
阅读(480) | 评论(0) | 转发(0) |