`
king_tt
  • 浏览: 2111211 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

EJB3缓存 JPA环境下使用Hibernate二级缓存

 
阅读更多
hibernate二级缓存本质上分为两类:
1.对象缓存
2.查询缓存

在JPA环境下,例如Jboss,底层还是通过Hibernate来实现JPA的Query。

下边简单说一下配置的步骤:

1.配置entity
在实体上方加入@Cache
Java代码
收藏代码
  1. importjava.io.Serializable;
  2. importjavax.persistence.Entity;
  3. importjavax.persistence.GeneratedValue;
  4. importjavax.persistence.Id;
  5. importjavax.persistence.Table;
  6. importorg.hibernate.annotations.Cache;
  7. importorg.hibernate.annotations.CacheConcurrencyStrategy;
  8. @Entity
  9. @Table
  10. @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
  11. publicclassUserimplementsSerializable{
  12. privatestaticfinallongserialVersionUID=-5121812640999313420L;
  13. privateIntegerid;
  14. privateStringname;
  15. @Id
  16. @GeneratedValue
  17. publicIntegergetId(){
  18. returnid;
  19. }
  20. publicvoidsetId(Integerid){
  21. this.id=id;
  22. }
  23. publicStringgetName(){
  24. returnname;
  25. }
  26. publicvoidsetName(Stringname){
  27. this.name=name;
  28. }
  29. }

CacheConcurrencyStrategy有几种,大家自己查下相关资料,按需要配置就可以了,我这里不需要事务支持.
需要注意的是,@Cache这个注解在很多jar包里都有,注意我上边写的import.

2.配置EJB/META-INF/persistence.xml
Xml代码
收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!--Persistencedeploymentdescriptorfordevprofile-->
  3. <persistencexmlns="http://java.sun.com/xml/ns/persistence"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
  6. version="1.0">
  7. <persistence-unitname="cachedb">
  8. <jta-data-source>java:/cachedb</jta-data-source>
  9. <properties>
  10. <propertyname="hibernate.hbm2ddl.auto"value="update"/>
  11. <propertyname="hibernate.show_sql"value="true"/>
  12. <propertyname="hibernate.format_sql"value="true"/>
  13. <propertyname="hibernate.cache.use_second_level_cache"value="true"/>
  14. <propertyname="hibernate.cache.use_structured_entries"value="true"/>
  15. <propertyname="hibernate.cache.use_query_cache"value="true"/>
  16. <propertyname="hibernate.cache.provider_class"value="com.googlecode.hibernate.memcached.MemcachedCacheProvider"/>
  17. <propertyname="hibernate.memcached.servers"value="localhost:11211"/>
  18. <propertyname="hibernate.memcached.cacheTimeSeconds"value="300"/>
  19. </properties>
  20. </persistence-unit>
  21. </persistence>

这里我使用了memcached,还有Ehcache、OSchache、或者TreeCache等,主要需配置:
hibernate.cache.use_second_level_cache = true
hibernate.cache.use_query_cache = true
与相应的hibernate.cache.provider_class

3.在程序中使用查询缓存
首先大家需要明确JPA对缓存的规范还没有形成,但JPA实现的厂家都会用hibernate来做JPA的实现,所以通常的方法是将JPA的Query转换成Hibernate的Query,大家用过Hibernate都知道,Hibernate里的Query有个setCacheable(true/false)的方法,这里是设置查询是否进入二级缓存的.
这里需要强调一下,默认的如果不在程序中显示的执行查询缓存声明操作,hibernate是不会对查询的list进行缓存的,默认的在开启hibernate二级缓存时,hibernate只缓存,根据主键id查找的对象,jpa下是find(id, clazz)方法.

下边是转换的代码:为了区分JPA的Query与Hibernate的Query,我写上了全名
Java代码
收藏代码
  1. publicList<User>listUser(){
  2. javax.persistence.Queryquery=em.createQuery("fromUseruwhereu.id>:id",User.class);
  3. query.setParameter("id",5);
  4. org.hibernate.ejb.QueryImplhs=null;
  5. org.hibernate.QueryhbQuery=null;
  6. List<User>list=null;
  7. if(queryinstanceoforg.hibernate.ejb.QueryImpl){
  8. hs=(org.hibernate.ejb.QueryImpl)query;
  9. hbQuery=hs.getHibernateQuery();
  10. hbQuery.setCacheable(true);//设置使用二级缓存
  11. list=hbQuery.list();
  12. }else{
  13. list=query.getResultList();
  14. }
  15. returnlist;
  16. }


这里再说一下使用经验,这样的转换不光是对createQuery方法,还能对createNamedQuery,甚至是createNativeQuery,都可以缓存查询结果.

只是一点使用经验,跟大家分享一下:)
分享到:
评论

相关推荐

    Struts2 + Spring3 + Hibernate3.5 整合(集成测试配套jar包更新构建脚本使用说明)

    本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范...

    Hibernate实战(第2版 中文高清版)

     1.4.4 Hibernate、EJB 3和JPA简介   1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2...

    Spring in Action(第2版)中文版

    5.4.4使用hibernate3上下文会话 5.5spring和java持久api 5.5.1使用jpa模板 5.5.2创建一个实体管理器工厂 5.5.3建立使用jpa的dao 5.6spring和ibatis 5.6.1配置ibatis客户模板 5.6.2建立基于ibatis的dao 5.7...

    Spring in Action(第二版 中文高清版).part2

    5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java持久API 5.5.1 使用JPA模板 5.5.2 创建一个实体管理器工厂 5.5.3 建立使用JPA的DAO 5.6 Spring和iBATIS 5.6.1 配置iBATIS客户模板 5.6.2 建立基于iBATIS...

    Spring in Action(第二版 中文高清版).part1

    5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java持久API 5.5.1 使用JPA模板 5.5.2 创建一个实体管理器工厂 5.5.3 建立使用JPA的DAO 5.6 Spring和iBATIS 5.6.1 配置iBATIS客户模板 5.6.2 建立基于iBATIS...

    java面试题库2021.pdf

    ④二级缓存与查询缓存 3、 Struts ①MVC 模式与 Struts 体系 4、 mybatis 5、 MVC 框架 6、 各框架对比与项目优化 7、 JPA ①EJB 三、 Java web 开发核心内容 1、 web 编程基础 ①Tomcat 服务器NOWCODER.COM 牛客网...

    Spring面试题

    1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键...

    spring-framework-3.0.0.M4-with-docs

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

    java必了解的六大问题

    java方向及学习方法 java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),... *最后呢,还有些java的技术,包括EJB3.0等,可以选择学习,与三大轻量级框架相比,EJB就是当之无愧的重量级了。

    Spring 2.0 开发参考手册

    12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.6.1. 在Spring环境中建立JPA 12.6.1.1. LocalEntityManagerFactoryBean 12.6.1.2. LocalContainerEntityManagerFactoryBean 12.6.1.3. 处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于...

    支持多数据库的ORM框架ef-orm.zip

    阅读推荐:第3、4章 特点二,将SQL的使用发挥到极致,解决SQL拼凑问题、数据库移植问题 大部分OLTP应用系统到最后都不免要使用SQL/JPQL,然而没有一个很好的方法解决SQL在多种数据库下兼容性的问题。 EF-ORM中...

    spring4.3.9相关jar包

    spring-context.jar(必须):这个jar 文件在基础IOC功能上为Spring 核心提供了大量扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持...

    spring chm文档

    12.6.1. 在Spring环境中建立JPA 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring 2.0的'spring-jdo.jar', 'spring-jpa.jar', 'spring-hibernate3.jar', 'spring-toplink.jar' 和 'spring-ibatis.jar' 被合并到Spring 2.5大粒度的'spring-orm.jar'中。 Spring 2.5的 'spring-test.jar' 取代...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

Global site tag (gtag.js) - Google Analytics