Hibernate使用二级缓存的问题.请大家帮忙看下。

我在做Hibernate中做测试的时候 ,使用的是Hibernate3.32版本,
在Hibernate.cfg.xml文件中配置了二级缓存.
但是在不同的条件下查询的时候,会从数据库里面查询,不会从二级缓存中取出数据, 我看了一下我的打印出的log信息。有两条sql语句。

下面是我的Hibernate.cfg.xml配置文件:
[code="java"]

root
mysql
jdbc:mysql://localhost/mysqldemo
org.hibernate.dialect.MySQLDialect
com.mysql.jdbc.Driver
true
true
<!--自动在数据库中生成表
create
-->

    <!-- 开启二级缓存 -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <!-- 设置缓存提供者 -->
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
    <!-- 查询缓存 -->
    <property name="hibernate.cache.use_query_cache">true</property>

    <!-- 映射文件 -->
    <mapping resource="pack/java/hibernate/mapping/User.hbm.xml"/>

    <!-- 指定哪些实体需要使用二级缓存,usage属性指定缓存的策略 -->
    <class-cache usage="read-only" class="pack.java.hibernate.pojo.User"/>
</session-factory>

[/code]

这里是配置缓存的echcache.xml文件:
[code="java"]


maxElementslnMemory="10000"
eternal="false"
overflowToDisk="true"
timeToldleSeconds="120"
timeToLiveSecods="120"
diskPersistent="false" />

[/code]

下面是Java测试代码:
[code="java"]
public void queryUser() {
// TODO Auto-generated method stub
if(session==null){
session = getSession();
}
query = session.createQuery("from "+User.class.getName()+" u where u.uname in('100','101','102','103','104','105')");
query.setCacheable(true);
query.setFirstResult((0)*1000).setMaxResults(1000);
List list = query.list();
for(User user:list){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+user.getUid()+","+user.getUname()+","+user.getSex()+","+user.getAddress());
}
session.close();

    if(!session.isOpen()){
        session = getSession();
    }
    query = session.createQuery("from "+User.class.getName()+" u where u.uname ='101'");
    query.setCacheable(true);
    query.setFirstResult((0)*1000).setMaxResults(1000);
    List<User> list2 = query.list();
    for(User user:list2){
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"+user.getUid()+","+user.getUname()+","+user.getSex()+","+user.getAddress());
    }
    session.close();
}

[/code]

下面是Hibernate生成的sql语句:
2011-10-17 23:37:32 org.hibernate.jdbc.AbstractBatcher.log(AbstractBatcher.java:401)

select
user0_.UID as UID0_,
user0_.UNAME as UNAME0_,
user0_.AGE as AGE0_,
user0_.ADDRESS as ADDRESS0_,
user0_.SEX as SEX0_,
user0_.REMARK as REMARK0_
from
User user0_
where
user0_.UNAME in (
'100' , '101' , '102' , '103' , '104' , '105'
) limit ?

2011-10-17 23:37:35 org.hibernate.jdbc.AbstractBatcher.log(AbstractBatcher.java:401)

select
user0_.UID as UID0_,
user0_.UNAME as UNAME0_,
user0_.AGE as AGE0_,
user0_.ADDRESS as ADDRESS0_,
user0_.SEX as SEX0_,
user0_.REMARK as REMARK0_
from
User user0_
where
user0_.UNAME='101' limit ?

请高手看看是什么原因..

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问