在hibernate中未从二级缓存中拾取对象?
我在cfg文件中指定了以下属性在hibernate中未从二级缓存中拾取对象?,hibernate,Hibernate,我在cfg文件中指定了以下属性 <property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider</property> 当T2传递上述语句时,它在后台生成下面的查询 Hibernat
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider</property>
当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>
解决了这个问题。实际上每个主程序都有自己的jvm实例,因此有自己的会话工厂。所以二级缓存在这里不起作用。我在同一个主程序中尝试了同样的事情,当会话在其中创建人之后关闭。然后打开新会话并尝试获取同一个人,它从二级缓存获取该人 有问题。实际上每个主程序都有自己的jvm实例,因此有自己的会话工厂。所以二级缓存在这里不起作用。我在同一个主程序中尝试了同样的事情,当会话在其中创建人之后关闭。然后打开新会话并尝试获取同一个人,它从二级缓存获取该人 您是否缓存了个人
实体?您的实体可序列化吗?您是否正确配置了ehcache.xml
?嗨,Tomsaz,答案在这里-您是否启用了Person实体上的缓存-正如您所看到的,person映射为。您的实体可序列化吗?-是的。您是否正确配置了ehcache.xml?-正如我在文章开头所说的,我在hibernate.cfg.xml中配置了两个属性,即hibernate.cache.use_second_level_cache和hibernate.cache.provider_类。是否还有其他需要配置的内容。您是否缓存了Person
实体?您的实体可序列化吗?您是否正确配置了ehcache.xml
?嗨,Tomsaz,答案在这里-您是否启用了Person实体上的缓存-正如您所看到的,person映射为。您的实体可序列化吗?-是的。您是否正确配置了ehcache.xml?-正如我在文章开头所说的,我在hibernate.cfg.xml中配置了两个属性,即hibernate.cache.use_second_level_cache和hibernate.cache.provider_类。还有什么我们需要配置的吗。
<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>