zoukankan      html  css  js  c++  java
  • 【SSH】——Hibernate三种状态之间的转化

    Hibernate的三种状态为:transient、persistent和detached。对这三种状态的理解可以结合Session缓存,在Session缓存中的状态为persistent,另外两种不在Session中。
    另一种说法是,Hibernate有四种状态,增加一个removed状态。在一个session实例的缓存中删除时会转化到该状态。

    1. transient
      通过new()创建,不在session的缓存中,也与数据库无关的状态。处在该状态的对象称为临时对象。

    2. persistent
      对象在session缓存区中,数据库中有数据与之对应。

    3. detached
      俗称游离状态,即存在于数据库中,但session中已经不存在该对象。

    Hibernate三种状态之间的转化

    上图是其三种状态之间的转化,下面我们通过实例来具体看一下。

    1、开始——>transient

    private static SessionFactory factory;
        /**
         * 完成sessionFactory的初始化
         */
        static{
            try{
                //读取hibernate.cfg.xml配置文件
                Configuration cfg=new Configuration().configure();
    
                //建立sessionFactory,可访问mysql
                 factory=cfg.buildSessionFactory();
    
            }catch(Exception e){
                e.printStackTrace();
            }finally{
    
            }
    
        }
    
        //获得session
        public static Session getSession(){
            return factory.openSession();
        }
    

    获取session对象

                //获取session对象
                session = HibernateUtil.getSession();
                // 开启
                ts = session.beginTransaction();
    
                // Transient状态
                user = new User();
                user.setName("张三");
                user.setPassword("1233");
                user.setCreateTime(new Date());
                user.setExpireTime(new Date());
    

    执行new()方法之后,对象进入transient状态。对照上图也可以看出,如果接下来不对其进行操作,该对象最终会被垃圾回收,不再是transient状态。
    那么接下来,我们对其执行简单的save()操作。

    2、transient——>persistent

              // 执行过后,被session管理 Persistent
                session.save(user);
    
                //修改用户姓名
                user.setName("张四");
    
             //commit会把数据与数据库进行同步。 
                ts.commit();

    3、persistent——>detached

    关闭session,对象状态由持久化转为游离态。

    if(session!=null){
                if(session.isOpen()){
                    session.close();
                }
            }

    4、detached——>persistent

    这里,我们通过update()方法实现。

               //再次修改用户名
               user.setName("张五");
               //获取session对象,与上面类似      
               session = HibernateUtil.getSession();
                // 开启
                ts = session.beginTransaction();
    
                // 将session管理
                // 变为persistent状态,清理缓存时同步数据库。
                session.update(user);
                session.getTransaction().commit();

    了解Hibernate中对象的三种状态,可以帮助我们对其进行灵活的操作。也可以帮助我们理解他与session缓存、数据库之间的关联。

  • 相关阅读:
    js~this的陷阱
    freemarker导出word带图片
    ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)
    一些编程上的小技巧
    while循环
    AIX 中以并发模式挂载vg
    老鸟的Python入门教程
    Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十三)
    java中线程机制
    [置顶] 程序员求职攻略(《程序员面试笔试宝典》)之计算机相关专业读研究生还是直接就业?
  • 原文地址:https://www.cnblogs.com/saixing/p/6730246.html
Copyright © 2011-2022 走看看