[置顶] ORM进阶:Hibernate对象的三大状态

简介


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


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

三种状态

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

状态的含义


临时状态

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


持久状态

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


游离状态

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

状态转换图

[置顶] ORM进阶:Hibernate对象的三大状态_第1张图片

简单实例

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和数据库中的记录。很容易就能明白状态是如何转换的了。

你可能感兴趣的:(Hibernate,orm)