Hibernate的缓存处理

翻译 2006年05月18日 17:54:00

20.2.1. 缓存映射(Cache mappings)

类或者集合映射的“<cache>元素”可以有下列形式:

<cache 
    usage="transactional|read-write|nonstrict-read-write|read-only"  (1)
/>
(1)

usage说明了缓存的策略: transactionalread-writenonstrict-read-writeread-only

另外(首选?), 你可以在hibernate.cfg.xml中指定<class-cache><collection-cache> 元素。

这里的usage 属性指明了缓存并发策略(cache concurrency strategy)

20.2.2. 策略:只读缓存(Strategy: read only)

如果你的应用程序只需读取一个持久化类的实例,而无需对其修改, 那么就可以对其进行只读 缓存。这是最简单,也是实用性最好的方法。甚至在集群中,它也能完美地运作。

<class name="eg.Immutable" mutable="false">
    <cache usage="read-only"/>
    ....
</class>

20.2.3.  策略:读/写缓存(Strategy: read/write)

如果应用程序需要更新数据,那么使用读/写缓存 比较合适。 如果应用程序要求“序列化事务”的隔离级别(serializable transaction isolation level),那么就决不能使用这种缓存策略。 如果在JTA环境中使用缓存,你必须指定hibernate.transaction.manager_lookup_class属性的值, 通过它,Hibernate才能知道该应用程序中JTA的TransactionManager的具体策略。 在其它环境中,你必须保证在Session.close()、或Session.disconnect()调用前, 整个事务已经结束。 如果你想在集群环境中使用此策略,你必须保证底层的缓存实现支持锁定(locking)。Hibernate内置的缓存策略并不支持锁定功能。

<class name="eg.Cat" .... >
    <cache usage="read-write"/>
    ....
    <set name="kittens" ... >
        <cache usage="read-write"/>
        ....
    </set>
</class>

20.2.4.  策略:非严格读/写缓存(Strategy: nonstrict read/write)

如果应用程序只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离, 那么比较适合使用非严格读/写缓存策略。如果在JTA环境中使用该策略, 你必须为其指定hibernate.transaction.manager_lookup_class属性的值, 在其它环境中,你必须保证在Session.close()、或Session.disconnect()调用前, 整个事务已经结束

-------------------------------------------------------------------------
在jBPM 中使用不少这样的非严格读/写缓存的处理:
<?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 default-access="field">

  <class name="org.jbpm.context.def.VariableAccess"
         table="JBPM_VARIABLEACCESS"
         lazy="false">
    <cache usage="nonstrict-read-write"/>
    <id name="id" column="ID_"><generator class="native" /></id>
   
    <property name="variableName" column="VARIABLENAME_" />
    <property name="access" column="ACCESS_" />
    <property name="mappedName" column="MAPPEDNAME_" />
  </class>

</hibernate-mapping>

它的ehcache.xml 是这样配置的:
<ehcache>
 <defaultCache
        maxElementsInMemory="100000"
        eternal="true"
        overflowToDisk="false"
        diskPersistent="false"
        />
</ehcache>

相关文章推荐

框架 day34 Hibernate,h对事务并发处理,管理session,二级缓存,h练习案例

hibernate 对事务并发处理        事务四个特性 ACID : 原子性、一致性、隔离性、持久性   1、隔离性引发问题 脏读、不可重复读、虚读 、丢失更新 (lost update)...

第16章 Hibernate事务处理和缓存管理

Hibernate的事务处理 数据库事务的概念 事务是数据库操作中一个最小的执行单元,它由一组相互依赖的操作行为组成。 数据库事务必须具有ACID特征,ACID是Atomic(原子性)、Con...

Hibernate的事务处理和二级缓存

事务的特性: 事务有严格的定义,需要同时满足4个特性,即原子性、一致性、隔离性、持久性。这4个特性通常称为ACID特性,具体如下: ·原子性(Atomic):表示将事务中所做的操作捆绑成一个不可分割的...

Hibernate缓存配置/批量处理

Hibernate除了自动对Session级别的事务进行一级缓存外,二级缓存都需要实现 org.hibernate.cache.CacheProvider接口,Hibernate已经实现了一...

hibernate的Session操作, 查询过滤, 缓存利用, 批量处理

一.                                                         Session操作, 查询过滤, 缓存利用, 批量处理 数据查询,装载一. ...

【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要进入商品的详细信息页面,就像淘宝里面那样。那么每次点击都要去后台查询一下该商品的详细信息,就会发送相应的sql语句,...

Hibernate缓存配置/批量处理

Hibernate除了自动对Session级别的事务进行一级缓存外,二级缓存都需要实现org.hibernate.cache.CacheProvider接口,Hibernate已经实现了一些缓存,开发...

一个Memcache+Hibernate自处理二级缓存问题

背景:使用Memcache+Hibernate时,在同一个session中先做新增操作,object放入memcache中,后续操作中,再从Memcache中取出update时会报错。而当缓存使用的是...
  • zjl103
  • zjl103
  • 2015年05月04日 19:15
  • 880

hibernate4.0使用二级缓存jar包

  • 2017年11月08日 17:39
  • 982KB
  • 下载

Hibernate二级缓存.doc

  • 2012年06月05日 12:30
  • 32KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate的缓存处理
举报原因:
原因补充:

(最多只允许输入30个字)