hibernate默认情况下是支持一级缓存,也就是session级的缓存的,而默认情况下是不支持二级缓存,即sessionFactory级的缓存的,二级缓存 一般比较少去考虑它,除非对效率要求非常高的时候,
这时侯如果我们的某一个实体要在多个session里面使用需要用到session间的缓存的时候就可以进行配置来实现二级缓存了!
在看文档的时候说可以在persistence.xml里面进行配置,但我一般是不用这个文件的,就直接使用注解!
在使用二级缓存之前需要先开启二级缓存的功能,否则不能使用;
具体做法是在hibernate的配置文件里面加上
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
此外还需要导入ehcache.jar包
一般就是如果哪个类需要使用到二级缓存就在该类上加上注解@cacheable,这就表明该类是支持二级缓存的,此外,还可以通过@cache注解来选择缓存策略,缓存策略主要有四种,分别是:
-
read-only
-
read-write
-
nonstrict-read-write
-
transactional
用法类似于这样:
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
<!-- -->
此外@cache注解还可以用于包含其他实体类的集合类属性,这样该集合也会缓存起来!
示例:
//实体类@cacheable
@Entity @Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Forest { ... }
//集合类@cache
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="CUST_ID")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<Ticket> getTickets() {
return tickets;
}
测试:
@Test
public void testFind() {//Model1是使用了二级缓存的,这里只会发出一条sql语句
Session session = factory.openSession();
Model1 model = (Model1)session.get(Model1.class, 1);
System.out.println(model.getId());
Session session2 = factory.openSession();
Model1 model2 = (Model1)session2.get(Model1.class, 1);
System.out.println(model2.getId());
session.close();
session2.close();
}
@Test
public void testFind2() {//Model2没有进行二级缓存,所以这里会发出两条sql语句
Session session = factory.openSession();
Model2 model = (Model2)session.get(Model2.class, 1);
System.out.println(model.getId());
Session session2 = factory.openSession();
Model2 model2 = (Model2)session2.get(Model2.class, 1);
System.out.println(model2.getId());
session.close();
session2.close();
}
@Cache用于集合类属性:
@Test
public void testFind4() {
//在没有给Model1里面的models加上二级缓存的注解@Cache之前,
//不同的Session里面的同一个对象使用models的时候会发出多条sql语句
//而加上了@Cache之后,下面只会发出一条SQL语句
Session session = factory.openSession();
Model1 model = (Model1)session.get(Model1.class, 1);
List<Model2> models = model.getModels();
for (Model2 mode2: models) {
System.out.println(mode2.getId());
}
Session session2 = factory.openSession();
Model1 model1 = (Model1)session2.get(Model1.class, 1);
List<Model2> models2 = model1.getModels();
for (Model2 model2: models2) {
System.out.println(model2.getId());
}
session.close();
session2.close();
}
@OneToMany(mappedBy="model1")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public List<Model2> getModels() {
return models;
}
分享到:
相关推荐
主要介绍了详解Hibernate注解方式的二级缓存的相关资料,需要的朋友可以参考下
NULL 博文链接:https://zhaoshijie.iteye.com/blog/998230
hibernate注解 1.级联关系 2.增删改查 3.二级缓存 4.日志配置 5.注解解析
完整的工程,可导入运行。测试内容为一级缓存和2级缓存。运行通过。配简单注解说明
SSH三层架构MVC(struts1.3+spring2.x+hibernate3.2),Hibernate(ehcache)二级缓存技术,Spring 注解形式依赖注入,ehcache缓存 源代码,内有MySql anbyke.sql文件,方便创建数据库演示效果!
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),...查询的优化,一级缓存,二级缓存,批量查询,注解方式
Hibernate4注解+Struts2的例子,里面详细介绍了怎么正确搭建Hibernate4,怎么使用注解生成实体类,怎么使用Hibernate4的二级缓存Ehcache,完整的增删查改功能,附带扁平化列表的效果图和里面关键配置的学习文档,让...
Spring3.2 Hibernate4.2 JPA2全注解实例.采用JTA事务管理,配置ehcache为二级缓存,在glassfish3.2.2和postgresql9测试通过。参考网上的资料整理。
DWR3.0 Spring3.2 Hibernate4.2 JPA全注解实例。采用JTA事务管理,配置ehcache为二级缓存,在glassfish3.2.2和postgresql9测试通过。参考网上的资料整理。.
2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. ...
Wicket6.7 Spring3.2 Hibernate4.2 EJB全注解实例.采用JTA事务管理,配置ehcache为二级缓存,在glassfish3.2.2和postgresql9测试通过。参考网上的资料整理。
hibernate jar 包和二级缓存jar包以及注解jar包
2.2.7. 映射二级表(secondary tables) 2.3. 映射查询 2.3.1. 映射EJBQL/HQL查询 2.3.2. 映射本地化查询 2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. 公式 2.4....
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
13.4.5 控制二级高速缓存 13.5 小结 第14章 利用HQL和JPA QL查询 14.1 创建和运行查询 14.1.1 准备查询 14.1.2 执行查询 14.1.3 使用具名查询 14.2 基本的HQL和JPA QL查询 14.2.1...
ehcache全解析 利用Spring和EHCache缓存结果 Hibernate+ehcache二级缓存技术 Spring基于注解的缓存配置--web应用实例 http://zjava.org.ru/
此项目整合了目前主流和最前源的web开发技术:采用ehcache实现二级缓存(包含查询缓存);用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿...