我在做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 ?
请高手看看是什么原因..