Hibernate(十三)session缓存机制和三种对象状态
hibernate向我们提供的主要的操纵数据库的接口,Session就是其中的一个,
它提供了基本的增,删,改,查方法.而且具有一个缓存机制,能够按照某个时间点,
按照缓存中的持久化对象属性的变化来更新数据库,着就是Session的缓存清理过程.
在Hibernate中对象分为三个状态,临时,持久化,游离.
如果我们希望Java里的一个对象一直存在,就必须有一个变量一直引用着这个对象.
当这个变量没了.对象也就被JVM回收了.
这篇博客我们就带大家一起来看一下session的缓存机制,也就是hibernate的一级缓存,
还有hibernate三种对象状态的详细情况。
当Session的save()方法持久化一个Customer对象时,
Customer对象被加入到Session的缓存中,
以后即使应用程序中的引用变量不再引用Customer对象,
只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。
Hibernate(十三)session缓存机制和三种对象状态
hibernate向我们提供的主要的操纵数据库的接口,Session就是其中的一个,
它提供了基本的增,删,改,查方法.而且具有一个缓存机制,能够按照某个时间点,
按照缓存中的持久化对象属性的变化来更新数据库,着就是Session的缓存清理过程.
在Hibernate中对象分为三个状态,临时,持久化,游离.
如果我们希望Java里的一个对象一直存在,就必须有一个变量一直引用着这个对象.
当这个变量没了.对象也就被JVM回收了.
这篇博客我们就带大家一起来看一下session的缓存机制,也就是hibernate的一级缓存,
还有hibernate三种对象状态的详细情况。
当Session的save()方法持久化一个Customer对象时,
Customer对象被加入到Session的缓存中,
以后即使应用程序中的引用变量不再引用Customer对象,
只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。
tx = session.beginTransaction();
Customer c1=new Customer(“zhangsan",new HashSet());
//Customer对象被持久化,并且加入到Session的缓存中
session.save(c1);
Long id=c1.getId();
//c1变量不再引用Customer对象
c1=null;
//从Session缓存中读取Customer对象,使c2变量引用Customer对象
Customer c2=(Customer)session.load(Customer.class,id);
tx.commit();
//关闭Session,清空缓存
session.close();
//访问Customer对象
System.out.println(c2.getName());
// c2变量不再引用Customer对象,此时Customer对象结束生命周期。
c2=null;