zoukankan      html  css  js  c++  java
  • 举例理解Hibernate的三种状态

      初学Hibernate,了解到Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态)。

      它们之间有如下转换图来说明:

      

      1、transient(瞬时状态)。

     

      如上图所示,当new出来一个新对象,还没有保存到数据库中的时候,就是transient状态。

      代码表示如下: 

     1             session=HibernateUtils.getSession();
     2             tx=session.beginTransaction();
     3             //Transient状态
     4             User user=new User();
     5             user.setName("Jessica");
     6             user.setPassword("123");
     7             user.setCreateTime(new Date());
     8             user.setExpireTime(new Date());
     9             //**********************************************************************
    10              /*
    11              *  以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
    12              *  缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
    13              *  user就变成了一个Persistent(持久化对象)
    14              */
    15             //***********************************************************************    

       2、persistent(持久化状态)。

      当临时状态的对象被执行save之后,就会被session托管,在session中有一个map存放着user对象,也就是说user对象被session引用着,被session纳入管理了。此时的user就处于持久状态了。

     1             session=HibernateUtils.getSession();
     2             tx=session.beginTransaction();
     3             //Transient状态
     4             User user=new User();
     5             user.setName("Jessica");
     6             user.setPassword("123");
     7             user.setCreateTime(new Date());
     8             user.setExpireTime(new Date());
     9             //**********************************************************************
    10              /*
    11              *  以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
    12              *  缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
    13              *  user就变成了一个Persistent(持久化对象)
    14              */
    15             //***********************************************************************
    16             //Persistent状态
    17             session.save(user);

                                                                                                      

       3、detached(游离状态)。

     

      当持久状态的对象user,在session关闭之后就会变成有游离状态。

     1         Session session=null;
     2         Transaction     tx=null;
     3         
     4         try {
     5             session=HibernateUtils.getSession();
     6             tx=session.beginTransaction();
     7             //Transient状态
     8             User user=new User();
     9             user.setName("Jessica");
    10             user.setPassword("123");
    11             user.setCreateTime(new Date());
    12             user.setExpireTime(new Date());
    13             //**********************************************************************
    14              /*
    15              *  以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
    16              *  缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
    17              *  user就变成了一个Persistent(持久化对象)
    18              */
    19             //***********************************************************************
    20             //Persistent状态
    21             session.save(user);
    22             
    23             //进行修改操作,修改name=“Juyahong”
    24             user.setName("Juyahong");
    25             //提交事务
    26             tx.commit();
    27             
    28         } catch (Exception e) {
    29             e.printStackTrace();
    30             if (tx != null) {
    31                 tx.rollback();
    32             }
    33         } finally{
    34             
    35             HibernateUtils.closeSession(session);
    36         }
    37         
    38         //detached状态

       通过以上例子,可以基本理解了Hibernate的三种状态,其实可以举个例子来说明:我们把数据库比喻成一个登记簿,当我们把信息登记到登记簿上的时候,这个过程就是持久化的过程。当登记完成之后,登记簿上的数据就是持久态数据,所谓持久态就是一直存在的状态。当我们需要用数据的时候,会从登记簿上查信息,我们查到的信息记录在临时的纸张或者脑海里,然后登记簿会放回原位,这时候临时纸张上或者脑海里的数据就是游离态,随时可能被遗忘,在hibernate中就是随时会被销毁的数据。瞬态数据和游离态数据有点儿类似,但是一点,就是他是存在持久化之前的数据,就是说我需要登记个人信息,我的个人信息还没有登记到登记簿上的时候,信息就是瞬态,一旦登记到登记簿上就变成持久态了,然后再查询到的就是游离态。 

  • 相关阅读:
    修改XCode默认注释并自动生成文档
    百度地图初始化引擎失败
    ios系统分享
    ios判断app是否有打开相机的权限
    mac下https方式连接svn连接不上解决方法
    abbyy ocr sdk
    ant的安装
    ubuntu安装nginx
    ubuntu安装gcc
    iOS保持长时间后台运行
  • 原文地址:https://www.cnblogs.com/jyh317/p/3666566.html
Copyright © 2011-2022 走看看