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