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查询。在这里我们看出了另外一个问题,这个问题可能会对性能产生影响,这就是集合类型的缓存策略。
--------------------------------------------
度的提高,为此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查询。在这里我们看出了另外一个问题,这个问题可能会对性能产生影响,这就是集合类型的缓存策略。
--------------------------------------------
相关文章推荐
- Hibernate 延迟加载部分集合、集合过滤session.createFilter
- hibernate实体及集合属性、关联实体的延迟加载
- Hibernate的延迟加载(3)——集合的延迟加载
- Hibernate 集合属性的延迟加载
- hibernate复习4 延迟加载1--实体
- Hibernate学习25 -- 延迟加载2 -- 集合Lazy特征
- Hibernate集合属性的延迟加载
- Hibernate性能调优--集合属性的延迟加载
- Hibernate延时加载---集合属性的延迟加载
- Hibernate中集合的延迟加载(lazy)和抓取策略(fetch)
- Hibernate集合类型的延迟加载学习及总结....
- Hibernate 延迟加载类属性
- Hibernate 的延迟加载
- hibernate延迟加载(get和load的区别)
- Hibernate之lazy延迟加载
- Hibernate 延迟加载剖析与代理模式应用
- 关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) )
- hibernate延迟加载(懒加载)详解
- 【Hibernate】lazy延迟加载
- 使用Hibernate.initialize解决no session的延迟加载问题