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中没有数据,数据库中有数据。

      

      

      

      

      

  • 相关阅读:
    XML 约束
    XML 高级
    XML 基础
    XML系列【目录】
    Java11 新特性
    Java10 新特性
    Java9 新特性 (二)语法改进
    Java9 新特性 (一)新增特性
    第一章:Class 文件结构
    java面试题全集(上)--java基础
  • 原文地址:https://www.cnblogs.com/forever2h/p/6735027.html
Copyright © 2011-2022 走看看