在hibernate中没有从二级缓存中挑选对象?

时间:2011-11-18 19:19:29

标签: hibernate

我在cfg文件中指定了以下属性。

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">
     net.sf.ehcache.hibernate.EhCacheProvider</property>

在我的main1程序中,我创建id为1的人并提交并在提交后使该线程保持不变。然后我开始另一个线程T2,这是一个id为1的人,代码为

person = (Person)session. get(Person.class,1);

当T2通过上述语句时,它会在后台生成以下查询

Hibernate: select person0_.id as id0_1_, person0_.cname as cname0_1_ from     MyProject1.Person person0_ where person0_.id=?

我不确定为什么线程T2从数据库读取而不是从二级缓存中获取?因为我使用用法作为读写

我的地图看起来像

<class name="com.daasl.Person"    >
<cache usage="read-write"/> 
  <id name="id" type="int">
     <generator class="increment"/>
  </id>
  <property name="name" column="cname" type="string"/>
 </class>  

1 个答案:

答案 0 :(得分:1)

得到了问题。实际上每个主程序都有自己的jvm实例,因此它自己的会话工厂。所以二级缓存在这里不起作用。在创建人员之后,一旦会话关闭,我在同一个主程序中尝试了同样的事情。然后打开新会话并尝试获取同一个人,它从二级缓存中获取。