温故知新:hibernate_03延迟加载

延迟加载作为一种提升效率的机制,利弊共存,优点是,在查询中,某些对象可能在查询之后,不会使用,比如User对象关联了Department对象,在只需要使用User对象的时候,如果不获取Deaprtment的相关信息,则不会查询Deparment对象的内容。但是弊端也显而易见,延迟加载在session关闭之后会失效,如果延迟加载使用不当,很容出现无法取得对象的情况。
 1 package demo;
 2 
 3 import org.hibernate.Session;
 4 import org.junit.Test;
 5 
 6 import domain.Student;
 7 import util.HibernateUtil;
 8 
 9 public class App 
10 {
11     //省略实体类和相关配置
12     @Test
13     public void lazyLoad() {
14         Session session = null;
15         try {
16             session = HibernateUtil.openSession();
17             session.beginTransaction();
18             
19             //s对象在load完毕之后是一个托管对象,只有一个id属性,如果不使用该对象,则不会进行查询
20             //但是,不论是否能够查询到,s对象不是空,是一个含有id的代理对象
21             Student s = (Student) session.load(Student.class, 99);
22             //System.out.println(s.getId());
23             
24             //get方法不存在延迟加载机制,会直接查询,但是查询不到会返回null
25             //而不是一个代理对象
26             Student s1 = (Student) session.get(Student.class, 5);
27             System.out.println(s1);
28             
29             //取得s2对象之后,若不进一步取得s2所包含的department属性,则不会进一步发送sql去
30             //取得department的信息
31             Student s2 = (Student) session.load(Student.class, 10);
32             //System.out.println(s2.getDepartment().getName());
33             
34             session.getTransaction().commit();
35 
36         } catch (Exception e) {
37             if (session != null) {
38                 session.getTransaction().rollback();
39             }
40         } finally{
41             if (session != null) {
42                 session.close();
43             }
44         }
45     }
46     
47 }
48     
49 

posted on 2015-01-20 14:57 都较瘦 阅读(75) 评论(0)  编辑  收藏 所属分类: ORMFramework


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜