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,hibernate二级缓存)