【hibernate】持久化对象的三种状态

引言

         上一篇博客中小编做了关于hibernate的小Demo,下面我们将深入研究hibernate持久化对象的三种状态。

Hibernate持久化对象的三种状态

         大家知道,java对象的生命周期,就是从new开始,到不再被任何引用变量引用结束,结束后将会被JVM的垃圾回收机制收回。在hibernate中,持久化的对象可以划分为三种状态:持久态(Persistent)、瞬时态(Transient)、脱管态(Detached)

一、  持久态(Persistent)

       1)   在session的缓存中,与session实例相关联

       2)   在数据库中存在与之相对应的记录

二、  瞬时态(Transient)

       1)不在session的缓存中红,不与任何的session实例相关联

       2)在数据库中没有与之相对应的记录

三、  脱管态(Detached)

      1)不在session的缓存中,不与任何的session实例相关联

      2) 在数据库中存在与之相对应的记录(前提条件是没有其他session实例删除该条记录)

       这三种状态是可以相互转化,具体过程如下:


 

Transient

新new出来的对象,就是瞬时对象。在内存中孤立存在,它的意义是携带信息的载体,不和数据库的数据又任何关联。

public void testSave1(){
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateUtils.getSession();			
			tx = session.beginTransaction();
			//Transient状态
			User3 user = new User3();
			user.setName("邢玉1");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());

 

Persistent

        通过session的save()或update()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就转换成了持久对象。

 

//persistent状态
//persistent状态的对象,当对象的属性发生改变的时候,
//hibernate在清理缓存(脏数据检查)的时候,会和数据库同步
			session.save(user);
			user.setName("邢玉2");
			
			tx.commit();

 

Detached

         当一个session指定close()或clear,evict()之后,持久对象就变成了脱管对象。这时对象的id虽然拥有数据库识别值,但他们目前并不在Hibernate持久层的管理下,它与瞬时对象的本质是相同的,只不过比瞬时对象多了数据标识的id值。脱管对象的引用依然有效,对象可以继续被修改,当它重新被关联到某个新的Session上时,会再次变成持久对象(脱管状态期间的改动将被持久化到数据库上)。

       }catch(Exception e)
		{
			e.printStackTrace();
			if(tx!= null){
				tx.rollback();
			}
			
		}finally{
			HibernateUtils.closeSession(session);
		}
		//detached状态
	}


            三段代码连接来,就是持久化对象三种状态的转换过程。

总结

  hibernate的学习还在路上,小编仍需继续努力!!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值