你的位置:首页 > 软件开发 > Java > Hibernnate延迟加载策略(这么详细你还看不懂)

Hibernnate延迟加载策略(这么详细你还看不懂)

发布时间:2016-08-19 15:00:22
好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!!当Hibernate 从数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实际上仅仅需要访问Dept对象,那么这些关联的Emp对象就白白浪费了许多内存空间。发 ...

Hibernnate延迟加载策略(这么详细你还看不懂)

好久没有认真写过博客了,今天就好好的写一篇吧!!!!!!!!!

Hibernate数据库中加载某个对象(例如:Dept对象)时,如果同时自动加载所有的关联的某个对象(例如:Emp对象),而程序实际上仅仅需要访问Dept对象,那么这些关联的Emp对象就白白浪费了许多内存空间。发生这种情况的原因是:就是立即加载的问题。

1.什么是立即加载呢?

Hibernate 查询 Dept 对象时,立即加载并加载与之关联的Emp对象,这种查询策略称为 立即加载

立即加载存在两大不足:

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

2.在应用程序只需要访问Dept对象时,而不需要访问Emp对象的场合,加载Emp对象完全是多余的操作,这些多余的Emp对象就白白的浪费了许多内存空间。

 

那么我们必须要解决这个问题,所以就要谈到了“延迟加载”的知识了,延迟加载策略能避免加载应用程序不需要访问的关联对象,以优化查询性能。

不过我们要知道有多种查询策略,接下来我们就一起来分析每一种查询策略的加载问题。

第一种:类级别的查询策略

Hibernnate延迟加载策略(这么详细你还看不懂)

类级别可选的加载策略包括立即加载和延迟加载,默认是延迟加载,如果,<class>元素的lazy的属性为true,表示采用延迟加载;如果lazy 属性 为 false,表示采用立即加载。

我们现在以代码来解释是最好的办法。

1.立即加载策略

我们在Dept.hbm.文件中 加 lazy=“false”  属性,即可。

Hibernnate延迟加载策略(这么详细你还看不懂)

表结构:

 Hibernnate延迟加载策略(这么详细你还看不懂)

测试代码:

  Session session = HibernateUtil.currentSession();    session.beginTransaction();    Dept dept = (Dept)session.load(Dept.class, 1);    System.out.println("部门名称"+dept.getdName());    System.out.println("===================");    Dept dept2 = (Dept)session.load(Dept.class, 1);    System.out.println("部门名称"+dept2.getdName());    session.getTransaction().commit();    HibernateUtil.closeSessio();

原标题:Hibernnate延迟加载策略(这么详细你还看不懂)

关键词:

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

可能感兴趣文章

我的浏览记录