您的位置:首页 > 其它

hibernate复习4 延迟加载2--集合

2009-02-24 23:31 260 查看
1.在Hibernate的延迟加载机制中,针对集合类型的应用,意义是最为重大的,因为这有可能使性能得到大幅
度的提高,为此Hibernate进行了大量的努力,其中包括对JDK
Collection的独立实现,我们在一对多关联中,定义的用来容纳关联对象的Set集合,并不是java.util.Set类型或其子类型,而是
net.sf.hibernate.collection.Set类型,通过使用自定义集合类的实现,Hibernate实现了集合类型的延迟加载。为了
对集合类型使用延迟加载,我们必须如下配置我们的实体类的关于关联的部分:

-----------------------------

<set name="players"
lazy="true"
inverse="true">
<key>
<column name="cid" not-null="true" />
</key>
<one-to-many class="com.fly.entity.Player" />
</set>

------------------------------

javacode:

-----------------------------

public void testOnetoMany(){
//火箭队
Captial captial =
(Captial) this.getSession().load(Captial.class, 1); <1>
System.out.println("captial.name:"+captial.getName());<2>

Collection player= captial.getPlayers();

Iterator it = player.iterator();

while(it.hasNext()){
Player p =(Player) it.next();
System.out.println("队员:"+p.getPname());
}
}

public static void main(String[] args) {
TestMany test1=new TestMany();
test1.testOnetoMany();
System.out.println("...");
}

-----------------------------------------------------------------

当程序执行到(1)处时,这时并不会发起对关联数据的查询来加载关联数据,只有运行到(2)处时,真正的数据读取操作才会开始,这时Hibernate会根据缓存中符合条件的数据索引,来查找符合条件的实体对象。

这里我们引入了一个全新的概念——数据索引,下面我们首先将接一下什么是数据索引。在
Hibernate中对集合类型进行缓存时,是分两部分进行缓存的,首先缓存集合中所有实体的id列表,然后缓存实体对象,这些实体对象的id列表,就是
所谓的数据索引。当查找数据索引时,如果没有找到对应的数据索引,这时就会一条select
SQL的执行,获得符合条件的数据,并构造实体对象集合和数据索引,然后返回实体对象的集合,并且将实体对象和数据索引纳入Hibernate的缓存之
中。另一方面,如果找到对应的数据索引,则从数据索引中取出id列表,然后根据id在缓存中查找对应的实体,如果找到就从缓存中返回,如果没有找到,在发
起select SQL查询。在这里我们看出了另外一个问题,这个问题可能会对性能产生影响,这就是集合类型的缓存策略。

--------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: