Hibernate持久化对象的状态:瞬时状态、持久化状态、托管状态

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值