Hibernate Session缓存经验总结

开发 后端
这里介绍Hibernate Session缓存有几种形式,可以在映射文件中配置:read-only,nonstrict-read- write,read-write,transactional。

在向大家详细介绍Hibernate Session缓存之前,首先让大家了解下主配置,然后全面介绍延迟加载。

一.主配置

◆查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据。但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反作用:它会白白耗费大量的系统资源但却难以派上用场。

◆fetch_size,同JDBC的相关参数作用类似,参数并不是越大越好,而应根据业务特征去设置

◆batch_size同上。

◆生产系统中,切记要关掉SQL语句打印。

二.Hibernate Session缓存

1.数据库级缓存:这级缓存是最高效和安全的,但不同的数据库可管理的层次并不一样,比如,在ORACLE中,可以在建表时指定将整个表置于缓存当中。

2.Session缓存:在一个Hibernate Session有效,这级缓存的可干预性不强,大多于Hibernate自动管理,但它提供清除缓存的方法,这在大批量增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除这一级缓存:Session.evict以及 Session.clear

3.应用缓存:在一个SessionFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑一些前提条件:
◆数据不会被第三方修改(比如,是否有另一个应用也在修改这些数据?)
◆数据不会太大
◆数据不会频繁更新(否则使用CACHE可能适得其反)
◆数据会被频繁查询
◆数据不是关键数据(如涉及钱,安全等方面的问题)。

Hibernate Session缓存有几种形式,可以在映射文件中配置:read-only(只读,适用于很少变更的静态数据/历史数据),nonstrict-read- write,read-write(比较普遍的形式,效率一般),transactional(JTA中,且支持的缓存产品较少)

4.分布式缓存:同3)的配置一样,只是缓存产品的选用不同,在目前的Hibernate中可供选择的不多,oscache, jboss cache,目前的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中,只利用数据库级的缓存是最安全的。

三.延迟加载
◆实体延迟加载:通过使用动态代理实现
◆集合延迟加载:通过实现自有的SET/LIST,Hibernate提供了这方面的支持
◆属性延迟加载:

【编辑推荐】

  1. 描述Hibernate持久性类
  2. 分析Java应用程序和Hibernate
  3. Hibernate3和JBOSS 3.2强强联手
  4. 详解Hibernate.properties文件
  5. 浅谈定制Hibernate映射
责任编辑:佚名 来源: IT168
相关推荐

2009-09-29 16:32:11

OJB Hiberna

2009-09-25 17:26:55

使用Hibernate

2009-09-25 16:55:08

Hibernate初始

2009-09-23 17:03:08

Hibernate S

2009-09-25 13:51:13

Hibernate S

2009-10-15 09:27:00

2009-09-16 17:13:54

学习Linq

2009-08-19 09:24:43

AJAX引擎经验总结

2009-11-17 11:24:00

PHP应用技巧

2009-09-11 13:29:31

LINQ查询操作

2009-08-20 17:35:47

Servlet和JSP

2009-09-16 17:44:54

LINQ to SQL

2010-06-12 17:37:18

UML实践指南

2009-10-22 15:07:12

综合布线工程

2011-07-08 13:15:52

JSP

2009-09-08 10:57:55

LINQ查询操作

2009-09-08 16:02:47

Linq使用Group

2013-12-18 15:54:21

2010-01-26 13:28:11

Android开发要点

2010-03-08 15:12:27

Python语言
点赞
收藏

51CTO技术栈公众号