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

来源:互联网 发布:惠普服务器数据恢复 编辑:程序博客网 时间:2024/06/07 06:33

直接进入主题:

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

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

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

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

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

2.关系状态换图


    

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("<span style="font-family:宋体;">张三</span>");            user.setPassword("<span style="font-family:宋体;">1234</span>");                     //Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update,update的实质不是更新数据,而是转换状态。            session.save(user);            user.setName("<span style="font-family:宋体;">李四</span>");            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("<span style="font-family:宋体;">王五</span>");            //在Detached状态下,更新对象的属性,需要update才能反映到数据库            session.update(user);            session.getTransaction().commit();        }catch(Exception e){            e.printStackTrace();            session.getTransaction().rollback();        }finally{            HibernateUtils.closeSession(session);        }


1 0