项目中使用了Hibernate,在要测试之前将应用部署到客户测试环境中时发现程序响应明显缓慢,经查后发现Hibernate的级联加载大大加大了响应时间,在加入了二级缓存(我用的是ehcache)后,发生了一系列问题,现做个记载
引用:
Spring Hibernate SessionFactory相关配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<prop key="hibernate.cache.use_second_level_cache">
true
</prop>
<prop key="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
</props>
</property>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
<property name="cacheQueries">
<value>true</value>
</property>
</bean>
<prop key="hibernate.cache.use_query_cache">true</prop>
<property name="cacheQueries">
<value>true</value>
</property>
以上是开启了查询缓存
怎么配置实体缓存请google
Ehcache配置:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir" />
<!-- 缓存最大数目 -->
<defaultCache
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="5000"
eternal="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
overflowToDisk="false"/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
overflowToDisk="false"/>
<cache name="com.sinotrust.entity.data.DataDir"
maxElementsInMemory="500"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasDicCodemanager"
maxElementsInMemory="700"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasDicCatalog"
maxElementsInMemory="100"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasSysMenuconf"
maxElementsInMemory="50"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
</ehcache>
问题1:实体新增后通过级联方式获取不到新增内容
原因是因为我在新增时没有在关联对像的set集合里加入新增的对像因此集合内和数据库是不同步的
解决:在新增时,设置相关实体的引用关系。
问题2:修改关联时原先关联方还是保有修改对像
解决:在修改时,先将原先关联方引用解除,再设置新的关系
分享到:
相关推荐
Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的直接访问。当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5...
在这个“Hibernate4二级缓存Ehcache案例”中,我们将深入探讨如何利用Ehcache作为Hibernate的二级缓存提供商,以提升应用性能。 首先,我们需要了解什么是二级缓存。一级缓存是Hibernate Session级别的缓存,每个...
在本压缩包“hibernate二级缓存包”中,重点包含的是 Ehcache 这个流行且广泛使用的二级缓存实现。 Ehcache 是一个开源的、高性能的缓存解决方案,它可以被集成到各种Java应用中,包括Hibernate框架。Ehcache 提供...
总之,理解和掌握Hibernate中的二级缓存ehcache对于提高Java应用的性能至关重要。正确配置和使用ehcache能有效减少数据库的负载,提高系统的响应速度。在实际项目中,根据业务需求调整缓存策略,平衡性能与资源消耗...
在这个"hibernate二级缓存实例"中,我们将深入探讨二级缓存的原理、配置以及在实际项目中的应用。 首先,我们需要了解一级缓存和二级缓存的区别。一级缓存是Session级别的,每个Session都有自己的一级缓存,用于...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
二级缓存可以是内存中的缓存,也可以扩展到硬盘,例如使用第三方缓存提供商(如 EhCache 或者 Infinispan)。二级缓存中存储的是对象的集合数据,而不是单个对象实例,这样可以更高效地处理大量数据。二级缓存可以...
【标题】:“Hibernate二级缓存(Ehcache)” 【正文】: Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作。然而,随着应用规模的扩大,性能优化变得至关重要,...
**hibernate二级缓存详解** Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,在处理大量数据时,性能优化显得尤为重要,这就是二级缓存的作用。本文将深入探讨Hibernate...
本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...
在Hibernate中,二级缓存可以使用不同的提供商,例如Ehcache和OSCache。配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`...
二级缓存的实现需要依赖第三方缓存提供者,如EhCache、Infinispan等。二级缓存的主要特点包括: - **跨事务共享**:与一级缓存不同,二级缓存可以在多个事务之间共享数据,提高了数据的复用性。 - **配置复杂**:二...
2. **配置Hibernate**:在Hibernate的配置文件`hibernate.cfg.xml`中启用二级缓存并指定缓存提供商。以下是一个使用Ehcache的示例: ```xml <property name="hibernate.cache.use_second_level_cache">true ...
本篇将详细介绍Hibernate二级缓存的概念、作用以及所需jar包的作用。 一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时...
以EhCache为例,我们需要在项目中引入ehcache-core或ehcache的依赖,并在Hibernate配置文件(hibernate.cfg.xml或persistence.xml)中启用二级缓存,添加如下配置: ```xml <property name="hibernate.cache.use_...
Hibernate 二级缓存是一种高效的数据存储机制,它能够显著提升Web应用的性能,尤其是在处理大量数据流动时。缓存的主要目标是减少应用与数据库之间的交互次数,从而降低延迟并减轻数据库服务器的压力。在Hibernate...
2. **缓存提供者(Cache Provider)**:Hibernate通过缓存提供者来实现二级缓存,常见的有Ehcache、Infinispan等。缓存提供者负责存储和检索数据,以及缓存的同步和过期策略。 3. **缓存策略(Cache Strategy)**:...
二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
**二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...