第一级别的缓存是Session级别的缓存,是属于事务范围的缓存,由Hibernate管理,一般无需进行干预。
Session之间不能共享一级缓存,因它会伴随session的生命周期的创建和消毁。
一级缓存是实体级别的缓存,就是只有在查询对象级别的时候才使用,如果使用HQL和SQL是查询属性级别的,是不使用一级缓存的!切记!!!!
demo:
package edu.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import edu.po.Users;
import edu.utils.HibernateSessionFactory;
/**
* Title: HibernateEhCacheTest.java
* Description: Hibernate一级缓存测试
* @author yh.zeng
* @date 2017-7-4
*/
public class HibernateSessionCacheTest {
static SessionFactory sessionFactory = HibernateSessionFactory.getSessionFactory();
public static void main(String args[]) {
Session session1 = sessionFactory.openSession();
session1.beginTransaction();
Users user1 = (Users)session1.get(Users.class, 6); //查询出来的数据会放到一级缓存中
System.out.println("用户名:" + user1.getUsername());
Users user2 = (Users)session1.get(Users.class, 6); //从一级缓存中取
System.out.println("用户名:" + user2.getUsername());
session1.getTransaction().commit();
//由于一级缓存是session级别的缓存,所以session2是获取不到session1中的缓存数据
Session session2 = sessionFactory.openSession();
session2.beginTransaction();
Users user3= (Users)session2.get(Users.class, 6); //查询出来的数据会放到一级缓存中
System.out.println("用户名:" + user3.getUsername());
session2.getTransaction().commit();
session1.close();
session2.close();
}
}
运行结果:
Hibernate: select users0_.id as id0_0_, users0_.version as version0_0_, users0_.username as username0_0_, users0_.password as password0_0_ from test.users users0_ where users0_.id=?
用户名:32323
用户名:32323
Hibernate: select users0_.id as id0_0_, users0_.version as version0_0_, users0_.username as username0_0_, users0_.password as password0_0_ from test.users users0_ where users0_.id=?
用户名:32323