• Hibernate持久化对象状态


    Hibernate,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关.

    各自是瞬时(Transient),持久太(persistent)和游离态(Detached)

    瞬时状态

    new命令开辟内存的java对象.比如:Student stu= newStudent();若没有变量对他引用,则被jvm回收.瞬时对象在内存中孤立存在,他的意义仅是携带信息的载体,不和数据库中的数据有不论什么的关联。通过session的save()和saveOrUpdate()方法能够把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就成了持久化对象,拥有和数据库记录同样的id标示(Hibernate自己主动将id赋予它) 

       瞬时特点:

        (1)不和Session实例关联

        (2)在数据库中没有和瞬时对象关联的记录

    持久态 

    持久的实例在数据库中有相应的记录.SessionTransction相关联.sessin,持久对象改变不会立即对数据变更.而必须在Transcation终止,commit,才与数据库进行同步.在此之前的持久太对象为脏对象. 

    使用 find,get ,loaditerater等方法查询的数据,都是持久对象.若一个瞬时对象被持久对象引用,则该对象也会变为持久对象. 

     假设使用delete()方法,它就会变为瞬时对象;当一个Session运行close()或clear()、evict()之后,持久对象就会变为托管对象。 

        持久特点:

        (1)和Session实例关联

        (2)在数据库中有和持久对象关联的记录 

    	代码演示样例:
    	public void testSave()
    		{
    			Session session =null;
    			Transaction tx=null ;
    			try{
    				session= HibernateUtils.getSesion();
    				 tx =session.beginTransaction();
    				
    				//transient 瞬时状态
    				User user= new User();
    				user.setName("sdf");
    				user.setPassword("hanhan23");
    				user.setCreateTime(new Date());
    				//persistent, ,session引用,po持久
    				session.save(user); //被引用,成为持久状态//可是为脏对象
    				user.setName("lisd");
    				tx.commit();//
    			}catch(Exception e){
    				e.printStackTrace();
    				tx.rollback();
    			}finally{
    				HibernateUtils.closeSession(session);
    			}
    			//deteached状态关闭sesion后
    		}

    以上演示样例演示瞬时态转为持久态对象

     托管状态

          与持久对象关联的Session被关闭后,对象变为托管。对托管对象的引用依旧有效,对象可继续被修改。托管对象假设又一次关联到某个新的Session上,会再次转变为持久的。托管状态期间的修改将会被持久化到数据库。

         托管状态拥有数据库标识id,所以它能够通过update()、saveOrUpdate()和lock()等方法,再度与持久层关联。

         托管特点:

         (1)本质上和瞬时对象同样

         (2)仅仅是比瞬时对象多了一个数据库记录标识值id

    小结:

    通过以上三种的对照,认识到,Hibernate中的对象是在session的管理进行数据的持久更新.状态之间的转换是与对象的生命周期息息相关.刚创建的内存中为游离态,若一旦被session保存为持久态(或被session引用).一旦sesion关闭或delete变为托管.学习之初,还请多多提意见.

  • 相关阅读:
    Beego 学习笔记12:文件的操作
    Beego 学习笔记11:文件的上传下载
    Beego 学习笔记10:Easyui使用
    Beego 学习笔记9:Boostrap使用介绍
    Beego 学习比较8:SQL语句
    Beego 学习笔记7:JS分页
    Beego学习笔记6:分页的实现
    【嵌入式linux】用户登录密码验证配置
    【Linux 环境搭建】ubuntu下nfs安装与配置
    【嵌入式 Linux文件系统】如何使用NFS文件系统
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4297077.html
Copyright © 2020-2023  润新知