码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-08-27 00:32:58      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:hibernate   orm   

简介

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

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

三种状态

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

状态的含义

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

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

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

状态转换图

技术分享

简单实例

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:hibernate   orm   

原文地址:http://blog.csdn.net/zc474235918/article/details/48013697

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!