你的位置:首页 > 软件开发 > ASP.net > Hibernate之lazy延迟加载(转)

Hibernate之lazy延迟加载(转)

发布时间:2016-08-17 21:00:30
一.延迟加载的概念 当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的也是代理对象,所以在上面这几种场景下就是延迟加载。二.理解立即加 ...

一.延迟加载的概念

   当Hibernate数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用session中的load的方法(在没有改变lazy属性为false的情况下)获取到的也是代理对象,所以在上面这几种场景下就是延迟加载。

二.理解立即加载的概念

  当Hibernate从数据库中加载某个对象时,加载关联的对象,生成的实际对象,获取使用session中的get的方法获取到的是实际对象。

三.为什么要使用延迟加载

  延迟加载策略能避免加载应用程序不需要访问的关联对象,以提高应用程序的性能。

四.立即加载的缺点

Hibernate在查询某个对象时,立即查询与之关联的对象,我们可以看出这种加载策略存在两大不足:

1.select的语句数目太多,需要频繁的访问数据库,会影响查询的性能。

2.在应用程序只需要访问要的对象,而不需要访问与他关联的对象的场景下,加载与之关联的对象完全是多余的操作,这些多余的操作是会占内存,这就造成了内存空间的浪费。

五.什么时候使用延迟加载什么时候使用立即加载

   如果程序加载一个持久化对象的目的是为访问他的属性,则可以采用立即加载。如果程序加载一个持久化对象的目的仅仅是为了获得他的引用,则可以采用延迟加载。

六.Hibernate在对象-关系映射问价中配置加载策略

   I.类级别:

      <class>元素中lazy属性的可选值为true(延迟加载)和false(立即加载);

      <class>元素中的lazy属性的默认值为true

   II.一对多关联级别:

      <set>元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);

      <set>元素中的lazy属性的默认值为true

   III.多对一关联级别:

      <many-to-one>元素中lazy属性的可选值为:proxy(延迟加载),no-proxy(无代理延迟加载)和false(立即加载)

      <many-to-one>元素中的lazy属性的默认值为proxy

   在下面的一些案例中都会以员工(Emp)的部门(Dept)的例子讲解:

   员工和部门是多对一的关系:

   关于员工和部门的Hibernate配置就不啰嗦了:可以看我的这篇博客:http://www.cnblogs.com/heyongjun1997/p/5767187.html

I.1类级别的查询策略:

   01.立即加载案例:

     需求:通过Session的load()方法加载Dept对象时:

     首先在Dept.hbm.

 Hibernate之lazy延迟加载(转)

 

@Testpublic void loadDept() {// 获取Session对象Session session = HibernateUtil.currentSession();// 如果通过load方式加载Dept对象Dept dept=(Dept)session.load(Dept.class, 12);   // 关闭sessionHibernateUtil.closeSession();}

原标题:Hibernate之lazy延迟加载(转)

关键词:Hibernate

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录