hibernate 的二级缓存..

public void query1(){
Session session = null;
session = GetSession.getSession();
UserBean user = (UserBean)session.get(UserBean.class,1);
System.out.println(user.getName());
session.close();
System.out.println("------------------------------");
Session session1 = GetSession.getSession();
UserBean u = (UserBean)session1.get(UserBean.class, 1);
System.out.println(u.getAddress());
session1.close();
System.out.println("------------------------------");
}

public void query2(){
    Session session = GetSession.getSession();
    UserBean user = (UserBean) session.get(UserBean.class, 1);
    System.out.println(user.getName());
}

(我先执行完query1 之后再执行query2 。两个是分开执行的!!)
这是我的两个方法,在query1中,在执行对一次get方法是发送了一条sql语句。这时将session关闭。再创建一个session1,在执行get方法是发送sql语句。只是得这个对象已经放在二级缓存里了。而我再次执行query2方法是不是应该直接到缓存中去找嘛。为什么query2还会发送sql语句呢?????
hibernate 高手给解答解答!!!
[b]问题补充:[/b]
不分开的话query2是不向数据库发送sql语句的,我试过了。
[b]问题补充:[/b]
谢谢你们的回答,不过好像不是我想要的答案

错了,上边说的不对了。hibernate 的sessionFactory 是重量级的。每一个项目都有一个就行。 你把你的东西放到一个方法去测试下吧。就是一个方法起两个session

(我先执行完query1 之后再执行query2 。两个是分开执行的!!) 你不分开执行试试

//这设置,存储实体的时候,不向二级缓存中放,只从二级缓存中去读取;
session.setCacheMode(CacheMode.GET);
//这是从数据库中查询对象,放到二级缓存中去!
session.setCacheMode(CacheMode.PUT);

如果你不设置,默认也存,也放。这样方便你调试。
hibernate二级缓存是不共享sessionFactory之间的数据的,你的是二个方法。
把你的测试session 放到一个方法里边去测试下。肯定不发!以前我也有这种困惑。
你试一试吧。

对了,补充下问题,你配置了二级缓存了吗?如果配置算我没有说。

如果没有配置下边:
Hiberante3二级缓存的配置和使用方法如下:

1. 必须把ehcache.jar包导入,然后到Hibernate3.2的etc文件下把ehcache.xml复制到工程src目录下(ehcache.xml里边的参数里边有详细英文说明);

(说明:ehcache.jar是第三方法的缓存产品,hiberante只是把它做了集成,还有好多第三方hibernate集成的缓存产品,相关说明请查阅hiberante3开发手册;ehcache支持分布应用的(这个和Hibernate3.2开发手册有出入,经过官网查证确实支持了),如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3开发手册都有相头说明。配置方法都类似);

4.Hibernate3的二级缓存默认是开起的,也可以指定开起。在hibernate.cfg.xml 文件下配置如下:

*修改hibernate.cfg.xml文件,开户二级缓存;

                 <property name=”hibernate.cache.use_second_level_cache”>true</property>

                 *指定二级缓存产品的提供商;

org.hibernate.cache.EhCacheProvider

要让那些实体使用二级缓存,在hibernate.cfg.xml配置文件中加入:

<!—

让这个实体用二级缓存 也可以在实体中映射文件去配置即:

-->

Read-only一般使用这个策略,其它的hibernate3开发手册中也有详细介绍;

CacheMode去hibernate3开发手册中搜索这个关键字,可以找到一级缓存和二级缓存交互使用的问题;