首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Hibernate Query借口的iterate方法 查询缓存的有关问题

2012-03-18 
Hibernate Query借口的iterate方法 查询缓存的问题。iterate()方法查询一级缓存吗?在我机器上测试,怎么不查

Hibernate Query借口的iterate方法 查询缓存的问题。
iterate()方法查询一级缓存吗?

在我机器上测试,怎么不查询一级缓存呢?

Java code
    @Test     public void testIterate() {         Session s = sf.getCurrentSession();         s.beginTransaction();                  Query q = s.createQuery("from Category");         Iterator<Category> it  = q.iterate();         while (it.hasNext()) {             Category c = it.next();             System.out.println(c.getId());         }                  it = q.iterate();                  while (it.hasNext()) {             Category c = it.next();             System.out.println(c.getId());         }         s.getTransaction().commit();    }




结果
Hibernate: 
  select
  category0_.id as col_0_0_ 
  from
  Category category0_
1
2
3
4
5
6
7
8
9
10
Hibernate: 
  select
  category0_.id as col_0_0_ 
  from
  Category category0_
1
2
3
4
5
6
7
8
9
10


为什么不查询一级缓存呢?

不是说list 和 iterate 方法有一个区别就是iterate查询缓存吗?



[解决办法]
iterate分两个步骤加载数据
1.查询出所有符合数据的ID,此步骤无法利用缓存,所以就会出现你看靠的多次select id from category;
2.当你真正访问实体属性时执行select * from Category where id=? 此步骤可以利用一级缓存,前提是这个实体已经加载到内存中,如果内存中不存在则需要发起查询,反之不需要....这就是所谓的利用缓存..

热点排行