悠悠隐于市 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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能