Hibernate PO对象的状态

HibernatePO对象有三种状态:临时状态(又称临时态)、持久状态(又称为持久态)和脱管状态(又称为脱管态、游离态)。处理持久态的对象也称为PO,临时对象和脱管对象也称为VO

1、临时态:

简单来说,由new命令开辟内存空间时刚生成的java对象就是处于临时态。

比如:

   User user = new User();

如果没有变量对该对象进行引用,它将被java虚拟机回收。

临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在hibernate中,可以通过Sessionsave()或者savaOrUpdate()方法将临时对象与数据库相关联,并插入数据库,转变成持久化对象。

 

2、持久态:

持久化状态,该对象在数据库中具有对应的一条记录,并拥有一个持久化标识(如:Integer id 其实对应的就是记录表的一个主键)。如果hibernate 中的Dao层方法delete(),就会把对应的持久化对象变为临时对象,对应数据库中的记录也会被删除,不再与数据库的记录关联。

总结一下,持久化对象特点:

   (1)和Session实例关联;

   (2)与数据库中有与之关联的记录;

 

3、脱管态(游离态):

当与某持久化对象关联的Session被关闭后,该持久化对象转变为脱管对象。脱管对象被重新关联到Session上时,将再次转变成持久化对象。

注意:脱管对象拥有数据库的识别值,可通过update()savaOrUpdate()等方法,转变成持久对象。

脱管对象特点:

   (1)本质上与临时对象相同,在没有任何变量引用它时,JVM会在核实的时候将它回收;

   (2)比临时对象多了一个数据库记录标识值;

 

4、Session中常用方法对PO对象状态的作用

临时状态、持久化状态和脱管状态(也就是游离状态),三种状态转化的方法都是通 过session来调用,瞬态到持久态的方法有save()、saveOrUpdate()、get()、load();持久态到瞬态的方法有 delete();游离态到持久态的方法有update()、saveOrUpdate()、lock();持久态到游离态的方法 有:session.close()、session.evict()、session.clear()。

 

 

5、save()update()的区别

 

save()的作用是保存一个新的对象,update()可以把一个脱管状态的对象(一定要和一个记录对应)更新到数据库。

 

 

 

6、update()saveOrUpdate()区别

 

saveOrUpdate()方法基本上就是合成了save()update()

 

通常下面的场景会使用到update()saveOrUpdate()::

 

   (1)程序在第一个Session中加载对象,接着把Session()关闭;

 

   (2)该对象被传递到表示层;

 

   (3)对象发生了一些改动;

 

   (4)该对象被返回到业务逻辑层最终到达持久层;

 

   (5)程序创建第二个Session,调用第二个Sessionupdate()方法持久化这些改动

 

 

posted @ 2015-06-18 19:26  虞秀权  阅读(1238)  评论(0编辑  收藏  举报