本站首页    管理页面    写新日志    退出


«September 2025»
123456
78910111213
14151617181920
21222324252627
282930


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7615688
建立时间:2006年5月29日




[Hibernate]Hibernate的缓存处理
软件技术,  电脑与网络

lhwork 发表于 2006/6/30 16:15:45

20.2.1. 缓存映射(Cache mappings) 类或者集合映射的“<cache>元素”可以有下列形式: <cache usage="transactional|read-write|nonstrict-read-write|read-only" (1)/> (1) usage说明了缓存的策略: transactional、 read-write、 nonstrict-read-write或 read-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>


阅读全文(1686) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144804762 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号