【发布时间】:2015-02-06 02:47:05
【问题描述】:
我的应用程序中需要一些 pojo 对象,所以我想知道如何启用二级缓存。到现在默认一级缓存是开启的,我也想知道二级缓存有什么优缺点。
【问题讨论】:
标签: java hibernate caching jpa orm
我的应用程序中需要一些 pojo 对象,所以我想知道如何启用二级缓存。到现在默认一级缓存是开启的,我也想知道二级缓存有什么优缺点。
【问题讨论】:
标签: java hibernate caching jpa orm
这是你需要做的:
设置以下 Hibernate 属性:
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">ehcache</property>
在您的类路径中添加一个ehcache.xml 文件,其中包含缓存配置条目:
<cache name="com.mycompany.MyEntity"
maxElementsInMemory="50"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="600"
timeToLiveSeconds="600"
diskPersistent="false"
memoryStoreEvictionPolicy="LRU"
/>
为每个实体定义缓存类型:
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class MyEntity {
...
}
【讨论】:
二级缓存在hibernate 3.0中引入
当我们从数据库加载任何对象时,然后休眠 验证该对象是否在本地缓存内存中可用 该特定会话 [ 表示一级缓存 ],如果不可用 然后休眠验证对象是否在全局缓存中可用 或工厂缓存[二级缓存],如果不可用则 hibernate 将访问数据库并从那里加载对象,并且 然后首先存储在会话的本地缓存中[第一级] 然后在全局缓存中【二级缓存】
当我们从数据库加载任何对象时,然后休眠 验证该对象是否在本地缓存内存中可用 该特定会话 [ 表示一级缓存 ],如果不可用 然后休眠验证对象是否在全局缓存中可用 或工厂缓存[二级缓存],如果不可用则 hibernate 将访问数据库并从那里加载对象,并且 然后首先存储在会话的本地缓存中[第一级] 然后在全局缓存中【二级缓存】
【讨论】:
JPA L2 缓存已启用,使用持久性属性进行配置
javax.persistence.sharedCache.mode
其值为 NONE |全部 | ENABLE_SELECTIVE | DISABLE_SELECTIVE |未指定。在所有有效的 JPA 实现中都可以使用此属性。
【讨论】: