Hibernate中对象的状态

说明:

        Hibernate是一个ORM框架。也就是底层数据表和项目中实体对应关系的一个操作框架。当使用Hibernate操作底层数据库时,每一个底层数据库中的表大都对应与一个实体。所以对实体的操作会映射到对底层数据库的操作。那么,在Hibernate对对象进行操作时,对象有三种状态。

Hibernate对象的三种状态:Hiberante实体有三种状态,实体是被session管理。

        1.瞬时态:对象刚刚被创建,没有被持久化,没有处于session中。该对象在内存中是自由存在的,与底

                         层 数据库没有任何关联,与session没有任何关系。

        2.持久状态:实体已经被持久化,加入到了session缓存中。通过对实体的操作会对底层数据库产生影

                          响。

        3.游离(脱管)状态:过去被session管理,但是现在session已经关闭。特点:已经持久化,但不在

                           Session缓存中。虽然存在与数据库对应的记录,但是不能同步。

三种状态之间的转换图:

          
Hibernate中对象的状态
       持久状态(Persistent)

             持久对象总是与Session和Transaction相关联,在一个session中,对持久对象的改变不会马上对数

             据库变更,而必须在Transaction种植,也就是执行commit()之后,才在数据库中真正运行sql变更,

             持久对象的状态才会与数据库进行同步。在同步之前的持久对象为脏对象。

      瞬时态转化为持久态:

             1.通过session的save()和saveOrUpdate()把一个瞬时对象与一个数据库相关联,是一个瞬时态转化

                为持久态对象。

             2.使用fine(),get(),load()和iterator()待方法查询到的数据对象,将成为持久化对象。

      持久态转化为托管态:

              当执行close()或clear(),evict()之后,持久化对象会变为托管对象。

Session的入门常用方法

 
(1)Query query = session.createQuery(hql):利用hql查询语句查询;
(2)Criteria critera = session.createCriteria(Class clazz);
(3)Transaction tx = session.beginTransaction();     //开始事务;tx.commit()提交事务;
(4)session.close();//关闭Session,此后被session管理的持久化对象变为脱管状态;
(5)session.save(Object obj);    //添加
(6)session.update(Object obj);     //更新
(7)session.delete(Object obj);    //删除
(8)Object obj = session.get(Class clazz,Serialiazble id);    //根据主键查找记录并返回;
(9)Object obj = session.load(Class clazz,Serializable id);    //和get方法效果一样,但是是懒加载,即在不使用他之前他不会返回对象;
 

三种状态的区分关键在于:

a)有没有ID

b)id在数据库中有没有

c)Session缓存中有没有

对应三种状态:

Transient:内存中new一个对象,没有Id 缓存中没有

Persistent:内存中有 有id  缓存中有

Detached:内存中有  有id  缓存中没有

相关推荐