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

  

  

  

  

  

原文地址:https://www.cnblogs.com/forever2h/p/6735027.html