首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate缓存对策之1+N(一)

2012-09-17 
Hibernate缓存策略之1+N(一)一级缓存中的1+N问题所谓1+N指的就是:一条查询实体对象的ID列表的查询语句和迭

Hibernate缓存策略之1+N(一)

一级缓存中的1+N问题

所谓1+N指的就是:一条查询实体对象的ID列表的查询语句和迭代查询具体的多个实体对象的查询语句

session的load/get或iterate操作会利用缓存,如果缓存中已有实体对象,将不再发出查询语句查询实体对象session的list操作将不会利用缓存,每次查询,都会发出查询语句如果查询实体对象,则list操作直接发查询语句把实体对象加载到内存,而iterate操作先发查询语句查ID列表,再发查询语句根据ID逐个查询实体对象如果查询的是普通结果集,则list和iterate操作将没有区别

看看下面的代码及描述:

//如果查询的不是实体对象,而是一些普通的结果集,则list操作和iterate操作将没有区别//不管是List还是iterate操作,每次查询,都会发出SQL语句!!!不再利用一级缓存!!//也就是说,一级缓存中缓存的数据只是实体对象,而不是一般的普通结果集!List persons = session.createQuery("select p.id,p.name from Person p").list();for (Iterator iterator = persons.iterator(); iterator.hasNext();) {Object[] p = (Object[]) iterator.next();System.out.println(p[0]+","+p[1]);}//如果查询的不是实体对象,而是一些普通的结果集,则list操作和iterate操作将没有区别Iterator iterator = session.createQuery("select p.id,p.name from Person p").iterate();for (; iterator.hasNext();) {Object[] p = (Object[]) iterator.next();System.out.println(p[0]+","+p[1]);}
?

?

?

?

?

热点排行