Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1967296
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类:

2008-07-17 22:49:16

了解get和load的区别?
 * get不支持lazy,load支持lazy
 * 采用get加载数据,如果没有匹配的数据,返回null,而load则抛出异常

 
java 代码
  1. Session session=getSessionFactory().openSession();  
  2. Transaction tr=session.beginTransaction();  
  3. //Student stu2=(Student)session.get(Student.class, new Integer(5));  
  4. //if(session.contains(stu2)) System.out.println("stu2 in the session");  
  5. Student stu=(Student)session.load(Student.classnew Integer(5));  
  6. stu.getAddress();  
  7. tr.commit();  
  8. 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) |
给主人留下些什么吧!~~