- 瞬时状态:对象由new操作符创建,但没有和session关联,也就是我们刚刚创建的对象,还没有保存到数据库中去
- 持久化状态:对象被保存到数据库中去了,并且还与session有关联
- 托管状态:对象已经被保存中去了,但与session没有关联了
下面用代码解释一下:
@Test
public void test() {
Customer c = new Customer();//瞬时状态
c.setCustName("Tom");
Session s = HibernateUtils.openSession();
Transaction t = s.beginTransaction();
t.begin();
s.save(c);//持久化状态
t.commit();
s.close();//session关闭,此时c为托管状态
//托管状态向持久化状态转化
Session s1 = HibernateUtils.openSession();
Transaction t1 = s.beginTransaction();
t1.begin();
s1.update(c);//持久化状态
t.commit();
s.close();//session关闭,此时c为托管状态
}
刚刚创建的c就是瞬时状态,刚刚创建,没有和session关联
执行下面这段代码,c就是持久化状态了:
s.save(c);//持久化状态
此时c被保存到数据库中去了,并且还与session有关联
当执行下面代码时,c就是托管状态了:
s.close();//session关闭,此时c为托管状态
此时c已经被保存中去了,但与session没有关联了
下面这段代码是演示如何从托管状态到持久化状态的
//托管状态向持久化状态转化
Session s1 = HibernateUtils.openSession();
Transaction t1 = s.beginTransaction();
t1.begin();
s1.update(c);//持久化状态
t.commit();
s.close();//session关闭,此时c为托管状态
简单说,就是让C再次与session建立关系就行了