悠悠隐于市 2011-10-17 23:47
浏览 124

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 ?

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

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记