ORM进阶:Hibernate对象的三大状态

来源:互联网 发布:listview加载网络图片 编辑:程序博客网 时间:2024/04/28 19:14

简介


Hibernate负责将实体模型,关联到关系模型。那么在程序运行过程中,如何保证实体对象与数据库中的一致性呢?


首先要了解一下Hibernate对象中的三种状态:

三种状态

  • 临时状态(Transient)
  • 持久状态(Persistent)
  • 游离状态(Detached)

状态的含义


临时状态

       在程序中第一次使用该对象。(既然是第一次使用实体对象,那么当然数据库中是没有该记录的)
       即:实体模型中存在,但是不被Session管理,数据库中没有该记录


持久状态

       当临时状态的对象,执行save() 或SaveOrUpdate()方法之后,将会被Session管理。从而变成持久状态。这种状态时
       即:实体模型存在,而且被Session管理了。数据库中已经存在该记录了(但是由于该记录权限不足,而无法在看到)


游离状态

       持久状态的对象,在提交事务之后,将编程游离状态。提交事务,Session将关闭。
       此刻的状态为:没有被Session管理,数据库中有该记录

状态转换图

Hibernate对象 状态转换图

简单实例

public void testSave1(){    Session session=null;    Transaction tx=null;    try{        session=HibernateUtils.getSession();        tx= session.beginTransaction();        //创建一个新对象        User user=new User();   //Transient状态        user.setName("张三");        user.setPassword("123");        //Persistent状态的对象,当对象的属性发生变化的时候        //Hibernate在清理缓存(脏数据检查)的时候,会和数据库同步        session.save(user); //由Transient状态变为Persistent状态        tx.commit();    //由Persistent状态变为detached状态    }catch(Exception e){        e.printStackTrace();        if(tx!=null){            tx.rollback();        }    }finally{        HibernateUtils.closeSession(session);    }}

总结


       这仅仅是一个非常简单的例子。Hibernate中对象的状态转换关系,每次在执行图中所示的方法的时候 会发生改变。
       对于Hibernate对象状态的转换,如果在代码中跟一下,每执行一步,对比看Session和数据库中的记录。很容易就能明白状态是如何转换的了。

1 0
原创粉丝点击