qq_27548721 2016-04-29 06:26 采纳率: 0%
浏览 1181
已结题

Hibernate的二级缓存问题

1.hibernate.cfg.xml配置如下

<!-- 设置二级缓存供应商 -->
    <property name="cache.provider_class">
        org.hibernate.cache.EhCacheProvider
    </property>
    <!-- 开启二级缓存 -->
    <property name="cache.use_second_level_cache">
        true
    </property>
    <!-- 开启二级缓存统计机制 -->
    <property name="generate_statistics">
        true
    </property>

2 .Privilege的hbm.xml配置如下

    <hibernate-mapping>
<class name="com.back.domain.privilege.Privilege" table="PRIVILEGE">
<cache usage="read-only"/>
    <id name="id" type="java.lang.Integer">
        <column name="ID" />
        <generator class="increment" />
    </id>
    <property name="role" type="java.lang.String">
        <column name="ROLE" />
    </property>
    <set name="uers" table="user_privilege" cascade="save-update">
        <key>
            <column name="PID" />
        </key>
        <many-to-many class="com.back.domain.user.User" column="UID" />
    </set>
</class>
</hibernate-mapping>

3.使用二级缓存

    SessionFactory sessionFactory=SessionFactoryUtils.getSesessionFactory();
    Session session=sessionFactory.openSession();
    Query query=session.createQuery("from com.back.domain.privilege.Privilege");
    List<Privilege> list=query.list();
    for(Privilege user:list){
        System.out.println(user.getRole());
    }
    System.out.println("二级缓存有:"+sessionFactory.getStatistics().getEntityLoadCount());
    session.close();
    System.out.println("--------------------");
    System.out.println("二级缓存有:"+sessionFactory.getStatistics().getEntityLoadCount());
    Session session2=sessionFactory.openSession();
    Query query2=session2.createQuery("from com.back.domain.privilege.Privilege where id=1");
    Iterator<Privilege> iterator=query2.iterate();
    while(iterator.hasNext()){
        System.out.println(iterator.next().getRole());
    }
    System.out.println("二级缓存有:"+sessionFactory.getStatistics().getEntityLoadCount());
    session2.close();
}
  1. 问题? 二级缓存已经有了值,为什么还是从数据库中又去获取了,我换成其他类都没这个问题,唯独这个Privilege有这个问题。而且本来Privilege表有4条记录,也就是二级缓存一开始有4个对象,但是经过迭代获取后,二级缓存有8个对象?
  • 写回答

2条回答 默认 最新

  • Robot-C 2016-04-29 06:32
    关注

    在加入ehcache.xml配置文件时所产生的编译错误异常!
       net.sf.ehcache.CacheException: Error configuring from file:/F:/Struts2/Hibernate21/bin/ehcache.xml. Initial cause was Error configuring from input stream. Initial ca......
    答案就在这里:Hibernate二级缓存问题
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    评论

报告相同问题?

悬赏问题

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