Hibernate PO对象状态

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

1、临时态:

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

比如:

User user = new User();

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

临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在hibernate中,可以通过Session的save()或者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,调用第二个Session的update()方法持久化这些改动。

Hibernate 的详细介绍请点这里
Hibernate 的下载地址请点这里

猜你喜欢

转载自www.linuxidc.com/Linux/2015-06/119041.htm
今日推荐