持久化类类三种状态介绍
瞬时态:也叫做临时态或自由态,它一般指我们new出来的对象,它不存在OID,与hibernate session无关联,在数据库中也无记录。它使用完成后,会被jvm直接回收掉,它只是用于信息携带。
简单说:无OID 与数据库中的信息无关联,不在session管理范围内。持久态:在hibernate session管理范围内,它具有持久化标识OID
它的特点,在事务未提交前一直是持久态,当它发生改变时,hibernate是可以检测到的。
简单说:有OID 由session管理,在数据库中有可能有,也有可有没有。托管态:也叫做游离态或离线态,它是指持久态对象失去了与session的关联,托管态对象它存在OID,在数据库中有可能存在,也有可能不存在。
对于托管态对象,它发生改变时hibernet不能检测到。
持久化类三种状态切换
瞬时态(new 出来的)
瞬时——>持久 save saveOrUpdate
瞬时—–>脱管(游离) 手动设置oid.持久态 它是由session管理
持久——->瞬时 delete() 被删除后持久化对象不在建议使用
持久—–>脱管 注意:session它的缓存就是所说的一级缓存
evict(清除一级缓存 中指定的一个对象)
clear(清空一级缓存)
close(关闭,清空一级缓存).脱管态 (它是无法直接获取)
脱管—–>瞬时 直接将oid删除
脱管—–>持久 update saveOrUpdate lock(过时)测试持久化对象的三种状态
// 测试持久化对象三种状态
@Test
public void test2() {
// 1.得到session
Session session = HibernateUtils.openSession();
session.beginTransaction();
Customer c = new Customer(); // 瞬时态 (无oid 与session无关联)
c.setName("张三");
c.setSex("男");
session.save(c); // 建立了c与session关联关系,它就是持久态,(有oid)
// 2.事务提供,关闭
session.getTransaction().commit();
session.close();
System.out.println(c.getId()); // 断开了与session的关联,它是托管态(有oid)
}
HibernateUtils工具类
public class HibernateUtils {
private static Configuration config;
private static SessionFactory sessionFactory;
static{
config=new Configuration().configure();
sessionFactory=config.buildSessionFactory();
}
public static Session openSession(){
return sessionFactory.openSession();
}
}