hibernate的持久化对象的三种状态及转换

直接进入主题:

1.hibernate持久化对象的状态分类transient 瞬时态、persistent持久态、detached脱管态

          瞬时态:session没有缓存数据,数据库没有对应的数据。例如:new 一个新的对象

          持久态session缓存数据,数据库中最终将会有数据。例如:执行save(user)方法

          脱管态session没有缓存,数据库中有数据。例如:session.close() / new User().setUid(1)

          在某些地方你还会听说另外他有一种状态(即四种状态) 删除态:给delete专门定义一个状态。但官方并承认,但是给出第四种状态也并无没有设么争议。

2.关系状态换图


  hibernate的持久化对象的三种状态及转换_第1张图片  

3.具体代码

        Session session = null;
        Transaction tx = null;
        User user = null;
        try {
            session = HibernateUtils.getSession();
            tx = session.beginTransaction();

            //Transient状态,临时状态,一经save就会转变到Persistent状态
            user = new User();
            user.setName("张三");
            user.setPassword("1234");
         
            //Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数
据库同步,不需要update,update的实质不是更新数据,而是转换状态。
            session.save(user);
            user.setName("李四");
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            tx.rollback();
        }finally {
            HibernateUtils.closeSession(session);
        }

        //Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态
         try{
            session = HibernateUtils.getSession();
            session.beginTransaction();
            user.setName("王五");
            //在Detached状态下,更新对象的属性,需要update才能反映到数据库
            session.update(user);
            session.getTransaction().commit();
        }catch(Exception e){
            e.printStackTrace();
            session.getTransaction().rollback();
        }finally{
            HibernateUtils.closeSession(session);
        }


你可能感兴趣的:(hibernate的持久化对象的三种状态及转换)