zoukankan      html  css  js  c++  java
  • hibernate 之 对象的生命周期

    1. 将对象给hibernateApi操作后,对象会发不同的改变,如图:

    2. 对象经历了3个阶段:

      a) 瞬时状态

      b) 持久状态

      c) 游离状态

    3. 对象生命周期一:

      new--->save--->close

    @Test
        public void testSession1(){
            //新new出来的user处于瞬时状态   该对象和Session现在没有关系
            User user = new User();
            user.setName("张旭阳");
            user.setAge(33);
            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                //user被save后 变为持久状态   持久状态下的数据 在提交事务时会进行数据同步
                //数据同步:指会将Session的对象和数据库表中的数据进行对比,如果不一致会更新动作
                session.save(user);
                user.setName("张学友");
                tx.commit();
            } catch (Exception e) {
                if(tx!=null)
                    tx.rollback();
            }finally{
                //当Session被关闭 后 user处于游离状态 :等待会回收,或者再次更新
                HibernateUtil.close();
            }
            System.out.println(user);
            
        }

    4. 对象的生命周期二:

      get--->clear--->update--->delete

    @Test
        public void testSession2(){
            //对象之间从session中获取 获取回来后 对象已经被session管理  这时对象处于持久状态
            User user = (User)session.get(User.class, 5);
            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                user.setName("刘罗锅");
                tx.commit();
            } catch (Exception e) {
                if(tx!=null)
                    tx.rollback();
            }finally{
                //从session中 将数据清理掉  clear清除session中的所有数据
                //user处于游离状态
                session.clear();
            }
            System.out.println(user);
            user.setName("刘涛");
            try {
                tx = session.beginTransaction();
                //user从游离状态变为了持久状态
                session.update(user);
                tx.commit();
            } catch (Exception e) {
                if(tx!=null)
                    tx.rollback();
            }finally{
                session.clear();
            }
            System.out.println(user);
            
        }

    5. 总结:

      瞬时状态: 内存中有数据,session中没有数据,数据库中没有。

      持久状态: 内存中有数据,session中有数据,数据库中有数据。

      游离状态: 内存中有数据,session中没有数据,数据库中有数据。

      

      

      

      

      

  • 相关阅读:
    你看那个人他像一条狗
    jvm系列(八):jvm知识点总览
    jvm系列(七):jvm调优-工具篇
    百亿互金平台救火故事
    一个脚本引发的血案
    一次dns缓存引发的惨案
    一次生产事故的优化经历
    从零到百亿互联网金融架构发展史
    2016颠倒梦想,2017静心前行
    Spring Boot(九):定时任务
  • 原文地址:https://www.cnblogs.com/forever2h/p/6735027.html
Copyright © 2011-2022 走看看