`
A牛哥哥
  • 浏览: 150224 次
社区版块
存档分类
最新评论

HIbernate createSQLQuery 使用二级缓存

阅读更多
    项目中大量用到了createSQLQuery, 用的倒是很爽, 后来想将查询结果缓存, 这下碰就到麻烦了,不过通过几次测试, 也顺利的缓存了结果, 赶快记下备忘, 也与大家分享.
    实体类Customer.java
@SuppressWarnings("serial")
public class Customer implements java.io.Serializable{
	private Integer id;
	private String name;
	private Integer age;
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	 
}

二级缓存怎么配就不啰嗦了, 贴上测试代码
	@Test
	public void testSQLQuery(){
		Session s = sf.openSession();
		Transaction tr = s.beginTransaction();
		SQLQuery q = s.createSQLQuery("select * from customers where id=1");
		q.setCacheable(true);
		Customer c=  (Customer) q.addEntity(Customer.class).uniqueResult();
		tr.commit();
		s.close();
		
	//上述代码会发出sql语句, 关闭session再开一个session, 以同样条件再次查询
     s = sf.openSession();
		tr = s.beginTransaction();
		
		q = s.createSQLQuery("select * from customers where id=1");
		q.setCacheable(true);
		c=  (Customer) q.addEntity(Customer.class).uniqueResult();
		System.out.println(c.getName()); //再次查询, 没有发出sql,说明是从缓存中取的
		tr.commit();
		s.close();
                 	}


之前一直报错, 角标越界:
java.lang.ArrayIndexOutOfBoundsException: 0

    后来加上addEntity()后就不报错了,至于原因是什么,我也不太清楚,我想查询缓存存的是查询条件, 类缓存存的才是数据, 不加addEntity查出来的数据就无法进入类缓存, 当再次查询时,还是得根据条件再查数据库, 就失去了缓存的意义, 所以必须用addEntity来指定实体类???
分享到:
评论

相关推荐

    hibernate code.rar

    Hibernate有第一级缓存和第二级缓存,第一级缓存是每个Session内部的缓存,而第二级缓存则可跨Session共享,能够显著提升性能。 总的来说,“hibernate code.rar”中的资源将会涵盖这些基础内容,并可能通过实例...

    HibernateDemo(hibernate基本用法演示)

    8. **缓存**:Hibernate 支持一级缓存(Session 缓存)和二级缓存,可以提高性能。可以通过配置决定是否启用和使用何种缓存策略。 9. **延迟加载(Lazy Loading)**:通过 `@OneToMany(mappedBy = "..." fetch = ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     22.4 管理Hibernate的第二级缓存  22.4.1 配置进程范围内的第二级缓存  22.4.2 配置集群范围内的第二级缓存  22.4.3 在应用程序中管理第二级缓存  22.4.4 Session与第二级缓存的交互模式  22.5 运行本章的...

    Hibernate执行持久层访问步骤

    2. 第二级缓存:可选配置,通过插件如Ehcache实现,跨Session共享,提高性能。 以上就是Hibernate执行持久层访问的基本步骤,掌握这些知识点,能帮助开发者高效地进行数据库操作。在实际开发中,还需要结合具体业务...

    hibernate 数据库操作方法

    1. 使用缓存:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),可以提高查询效率。 2. 实体类的注解配置:使用注解代替XML配置,使代码更简洁,更易于维护。 3. 数据库设计:遵循...

    Hibernate备课笔记.pdf

    4. Cache:Hibernate内置了二级缓存机制,包括一级缓存Session和二级缓存SessionFactory,提高了数据访问速度。 二、Hibernate配置 1. 配置文件:hibernate.cfg.xml是Hibernate的主要配置文件,包含了数据库连接...

    hibernate 3.2.0 RC1 中文帮助文档

    8. 第二级缓存:为了提高性能,Hibernate支持第二级缓存,它可以缓存整个实体或查询结果。文档会解释如何配置缓存提供商,以及如何使用缓存策略。 9. 批量操作:Hibernate提供了批量处理的API,如`Session....

    hibernate动态数据库进化版

    6. **二级缓存的动态配置**:根据不同的数据库和业务需求,可能需要动态配置Hibernate的二级缓存策略,如Ehcache或Infinispan。 7. **事件监听器**:通过实现Hibernate的事件监听器接口,可以在对象的生命周期事件...

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    3. 查询级别缓存:此缓存存储查询的结果集,通常配合二级缓存使用。对于那些经常使用相同参数的查询,预加载结果可以显著提高性能。但需要注意的是,如果数据频繁更新,启用查询缓存可能会导致数据不一致。 配置...

    hibernate.rar

    Hibernate支持第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存)。缓存可以减少数据库访问,提高系统性能。 八、事务管理 Hibernate提供了对JTA和 JDBC事务的支持,通过Transaction对象...

    hibernate5--4.检索方式及策略

    1. **第二级缓存**: Hibernate提供了二级缓存机制,可以存储已经查询过的对象,减少对数据库的访问。可以使用第三方缓存服务如EhCache或Infinispan。 2. **缓存策略**: 可以配置查询缓存,将查询结果缓存起来,避免...

    hibernate-release-5.0.0.Final(1).zip

    - 利用缓存机制提高数据访问速度,如一级缓存(Session级)和二级缓存(SessionFactory级)。 五、最佳实践 1. 合理设计实体类:遵循单一职责原则,避免实体类过于庞大,提高代码可维护性。 2. 选择合适的映射策略...

    Hibernate API.rar

    二级缓存是SessionFactory级别的,可以跨Session共享。我们还可以配置第三方缓存提供商,如Ehcache,进一步优化性能。 七、实体关系映射 Hibernate支持多种关系映射,包括一对一(OneToOne)、一对多(OneToMany)...

    培训机构Hibernate课件

    为了提高性能,Hibernate支持二级缓存,它可以存储已加载的实体实例,减少对数据库的访问。常见的第二级缓存实现有Ehcache和Hibernate内置的缓存。 **8. 异步与批处理** Hibernate 支持异步操作,通过Future或...

    hibernate的一个简单例程

    Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),可以提高性能,减少对数据库的访问。 **总结** 这个简单的Hibernate例程涵盖了从环境配置、实体类定义到持久化操作、事务管理和...

    hibernate增删改查

    9. **缓存**:Hibernate 提供了两级缓存机制,一级缓存是Session级别的,自动管理,而二级缓存是SessionFactory级别的,可以配置第三方缓存插件如EhCache或Infinispan。 10. **HQL和Criteria查询**:HQL是Hibernate...

    使用Hibernate的一个完整例子

    例如,使用`@Cacheable`注解启用二级缓存,或者配置查询缓存。 以上就是一个使用Hibernate进行数据库操作的完整例子。通过这个例子,我们可以看到Hibernate如何将Java对象和数据库表进行映射,以及如何执行CRUD操作...

    hibernate的配置使用和各种查询

    - Hibernate的`SessionFactory`支持二级缓存,用于存储跨事务的数据,可以显著提高应用性能。 - 一级缓存(默认开启):由`Session`管理,当`Session`关闭后,缓存中的数据会被清除。 - 二级缓存(可选):由`...

    Hibernate中文学习资料

    Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)。第一级缓存默认开启,而第二级缓存则需要通过配置和插件实现,如EhCache或Infinispan。 10. **懒加载与即时加载** Hibernate...

Global site tag (gtag.js) - Google Analytics