- 瞬时状态:对象由new操作符创建,但没有和session关联,也就是我们刚刚创建的对象,还没有保存到数据库中去
- 持久化状态:对象被保存到数据库中去了,并且还与session有关联
- 托管状态:对象已经被保存中去了,但与session没有关联了
下面用代码解释一下:
@Testpublic 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建立关系就行了