zoukankan      html  css  js  c++  java
  • Hibernate的三种状态

    转自:举例理解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中就是随时会被销毁的数据。瞬态数据和游离态数据有点儿类似,但是一点,就是他是存在持久化之前的数据,就是说我需要登记个人信息,我的个人信息还没有登记到登记簿上的时候,信息就是瞬态,一旦登记到登记簿上就变成持久态了,然后再查询到的就是游离态。 

  • 相关阅读:
    November 07th, 2017 Week 45th Tuesday
    November 06th, 2017 Week 45th Monday
    November 05th, 2017 Week 45th Sunday
    November 04th, 2017 Week 44th Saturday
    November 03rd, 2017 Week 44th Friday
    Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
    图片方向 image orientation Exif
    Asp.net core 学习笔记 ( Router 路由 )
    Asp.net core 学习笔记 ( Configuration 配置 )
    qrcode render 二维码扫描读取
  • 原文地址:https://www.cnblogs.com/drizzlewithwind/p/6287424.html
Copyright © 2011-2022 走看看