当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

容器的迟误初始(Lazy Initialization)[Java编程]

赞助商链接



  本文“容器的迟误初始(Lazy Initialization)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

有时刻您只是想要得到物件中某个属性的资料,假如您的物件中包含Set等容器物件,若从资料库中载入资料时全部载入全部的物件,却只是为了获得某个属性,明显的这样很没有效率.

以Set中的典范来说,假如您只是想获得物件之後,显示物件的某些属性,比方name属性:

Session session = sessionFactory.openSession();
User user = (User) session.load(User.class, new Integer(1));
System.out.println(user.getName());
session.close();

在这个例子中,email的资讯不必要从资料库中全部载入,在Hibernate中援助容器的耽误初始(Lazy onitialization),只有在真正需求容器物件中的资料时,才从资料库中获得资料,预设容器类会利用耽误加载的功效,比方上面的程式实际上会利用以下的SQL:

Hibernate: select user0_.id as id0_, user0_.name as name0_0_ from user user0_ where user0_.id=?

可以藉由映射文件中的lazy属性来设定能否利用耽误初始,比方在映射文件中以下设定:

User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
   PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

   <class name="onlyfun.caterpillar.User" table="user">
     ....
     <set name="emails" table="email" lazy="false">
       <key column="id"/>
       <element type="java.lang.String"
           column="address"/>
     </set>
   </class>

</hibernate-mapping>

由於lazy属性被设定为false,耽误初始的功效被关闭,所以上面的程式会利用以下的SQL来查询:

Hibernate:
select user0_.id as id0_, user0_.name as name0_0_
from user user0_ where user0_.id=?
Hibernate:
select emails0_.id as id0_, emails0_.address as address0_
from email emails0_ where emails0_.id=?

全部的容器物件之资料一并被查询了,即便程式中还不会利用到容器中的物件资讯.

在启用耽误初始的情形下,假如以下查询资料:

Session session = sessionFactory.openSession();
User user = (User) session.load(User.class, new Integer(1));
System.out.println(user.getName());
Iterator iterator = user.getEmails().iterator();
while(iterator.hasNext()) {
   System.out.println(iterator.next());
}
session.close();


  以上是“容器的迟误初始(Lazy Initialization)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 容器的迟误初始(Lazy Initialization)
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .