`
pacer123
  • 浏览: 90773 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

hibernate配置二级缓存以及问题解决

 
阅读更多

实现hibernate二级缓存,需要进行如下配置:

配置步骤一:
修改hibernate.cfg.xml文件,在配置中增加:
 <!-- 开启查询缓存 -->
  <property name="hibernate.cache.use_query_cache">true</property>
  <!-- 开启二级缓存 -->
  <property name="hibernate.cache.use_second_level_cache">true</property>
  <!-- 指定二级缓存提供商驱动 -->
  <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

配置步骤二:
在工程项目conf文件夹(依据项目修改路径,保证编译后在classes路径下即可)下新建一个ehcache.xml文件,其内容为:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="ehcache.xsd">
 <diskStore path="java.io.tmpdir" />
 <defaultCache maxElementsInMemory="10000" eternal="false"
  timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
  diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
  memoryStoreEvictionPolicy="LRU" />
</ehcache>
配置步骤三:
如果要缓存某对象,修改其hbm文件,在class节点下添加<cache usage="read-only"/>属性例如:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.demo.entity">

    <class name="com.vogue.bbsphoto.entity.Forum"
    table="cdb_forums">
        <cache usage="read-only"/>
        <id name="ID" column="fid" unsaved-value="null">
            <generator class="increment" />
        </id>
        <property name="name" column="name" type="string" />
        <property name="type" column="type" type="string" />
    </class>
</hibernate-mapping>
配置步骤四:
为了使用查询缓存,Query必须设置cacheable为true,query.setCacheable(true);
例如dao父类中用于hql查询的方法修改后为:
/**
     * 执行hql语句的查询
     * @param sql
     * @return
     */
    public List executeQuery(String hql){
        List list = new ArrayList();
        Session session = HibernateSessionFactory.currentSession();
        Transaction tx = null;
        Query query = session.createQuery(hql);
        
query.setCacheable(true);
        try {
            tx = session.beginTransaction();
            list = query.list();
            tx.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            HibernateSessionFactory.rollbackTransaction(tx);
            
        } finally {
            HibernateSessionFactory.closeSession();
        }
        return list;
    }

 

完成上面的四个步骤,即可实现。但是在开发过程中可能会碰到问题:

     1、报错:找不到net/sf/ehcache/CacheException类,问题是缺少ehcache.jar包

     2、导入jar包后报错:

java.lang.IllegalAccessError: tried to access method net.sf.ehcache.CacheManager.<init>()V from class org.hibernate.cache.EhCacheProvider

         因为版本不正确,可以从网上下载ehcache-1.2.3.jar  导入即可完成。问题解决

 

测试:在测试类中或者公共dao中增加

   Statistics message=dao.sessionFactory.getStatistics(); 
   System.out.println("二级缓存命中数:"+message.getSecondLevelCacheHitCount()); 

 

   多次点击查询调用此方法,后台输出如果二级缓存命中数>0 则成功。

 

  希望此文档对在此处碰到问题的人有所帮助。

 

 

分享到:
评论

相关推荐

    Spring集成的Hibernate配置二级缓存

    本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...

    为Spring集成的Hibernate配置二级缓存

    下面我们将详细探讨如何为Spring集成的Hibernate配置二级缓存。 首先,我们需要了解Hibernate的二级缓存机制。一级缓存是每个Session内部的缓存,而二级缓存则是SessionFactory级别的,它可以被多个Session共享。二...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    hibernate5.1二级缓存包

    配置二级缓存主要包括以下几个步骤: 1. **引入依赖**:首先需要在项目的 Maven 或者 Gradle 构建文件中添加相应的二级缓存库依赖,如 Ehcache 或 Infinispan。 2. **配置**:在 Hibernate 的配置文件(如 ...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    在Spring Boot项目中配置Redis作为Hibernate的二级缓存,我们需要以下步骤: 1. **添加依赖**: 首先,在`pom.xml`文件中添加Spring Boot的JPA、Hibernate和Redis相关依赖,如: ```xml &lt;groupId&gt;org.spring...

    hibernate一级缓存和二级缓存的区别与联系

    二级缓存可以通过设置不同的并发访问策略来解决并发问题,如事务型、读写型或非严格读写型,以适应不同场景下的需求。 持久化层的缓存范围决定了缓存的生命周期和访问权限。事务范围的缓存最安全,但只限于当前事务...

    Hibernate二级缓存

    2. **配置二级缓存**:在`hibernate.cfg.xml`配置文件中,需要指定二级缓存的提供商。例如,添加如下配置来启用ehcache: ```xml &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache....

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    配置二级缓存需要在Hibernate的配置文件中指定缓存提供者,并为需要缓存的实体类设置缓存策略。以下是一个简单的二级缓存配置示例: ```xml &lt;hibernate-configuration&gt; &lt;!-- 配置缓存插件 --&gt; &lt;property name="...

    hibernate二级缓存实例

    以Ehcache为例,它是Hibernate常用的一种二级缓存解决方案,提供了内存和磁盘两层缓存,支持自动过期策略,确保数据的实时性。 配置二级缓存主要包括以下几个步骤: 1. 引入依赖:在项目的pom.xml或build.gradle...

    Hibernate4二级缓存实例(源码)

    3. **Hibernate与memcached集成**:将memcached作为Hibernate二级缓存的提供者,需要配置相应的插件或库,如hibernate-ehcache或hibernate-memcached。集成过程通常包括配置Hibernate的配置文件(hibernate.cfg.xml...

    hibernate4配置二级缓存

    Ehcache是Hibernate常用的二级缓存提供商,它是一款开源、高性能、轻量级的缓存解决方案。 配置Hibernate4的二级缓存主要涉及以下几个步骤: 1. **引入依赖**:首先,你需要在项目的pom.xml或build.gradle文件中...

    hibernate一级缓存、二级缓存和查询缓存

    - **配置复杂**:二级缓存需要在Hibernate配置文件中指定缓存提供商,并对实体类进行配置,以便它们能够参与缓存。 - **缓存策略**:二级缓存支持不同的缓存策略,如读写策略、只读策略、定时刷新策略等,可以根据...

    hibernate开启二级缓存和查询缓存

    Hibernate 是一个流行的对象关系...通过以上内容,我们可以了解到 Hibernate 的二级缓存和查询缓存机制,以及如何在实际应用中配置和使用它们。合理利用这些缓存技术,能有效提升应用程序的性能,减轻数据库的压力。

    hibernate 二级缓存详解

    总结来说,Hibernate的二级缓存是提升性能的关键手段,通过合理配置和使用,可以有效减少数据库交互,提高应用响应速度。需要注意的是,二级缓存虽然强大,但也需谨慎使用,防止数据一致性问题,尤其是在高并发环境...

    hibernate配置二三级缓存

    通过上述步骤,我们可以有效地在Hibernate中配置二级缓存以及查询缓存,从而显著提升数据访问性能。对于更复杂的缓存需求,则可以通过引入其他缓存组件或者自定义缓存策略来实现,以达到更高的系统性能和响应速度。

    Hibernate一级缓存、二级缓存以及查询缓存实例

    本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...

    hibernate二级缓存示例源码

    在Hibernate配置文件(hibernate.cfg.xml)中,我们需要添加二级缓存插件的相关配置,例如Ehcache: ```xml &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache....

    hibernate二级缓存要导入的包

    配置二级缓存的步骤通常如下: 1. **引入依赖**:在项目构建工具(如Maven或Gradle)的配置文件中添加对应二级缓存提供者的依赖。如果是Ehcache,对应的Maven坐标可能是: ```xml &lt;groupId&gt;org.hibernate ...

Global site tag (gtag.js) - Google Analytics