Hibernate的四种状态

来源:互联网 发布:telnet 测试 udp端口 编辑:程序博客网 时间:2024/05/21 08:59

纸上得来终觉浅

开始学习Hibernate对象的四种状态,花了一上午的时间来思考:

1.为什么要对Hibernate的对象分为几种状态:

状态是对对象所处所处情境的描述,在对hibernate定义了几种状态之后即方便了为人所达成共识,同时也能更好的理解hibernate的工作机制。

2.如何区分Hibernate的几种状态:

开始的时候我根据下面两个是否进行判断:

1)对象是否在Session缓存中

2)在数据表中是否有记录

可以上述条件进行组合的形式来穷尽四种种状态,但是并不够完全合理。因为四个状态是可以进行转换的,以数据保存流程的形式来区分更为合理,同时也能够使这四种状态包含了对象可能的所有情况 ,看下面一张图。

3)如下图所示:


A:如果对象是刚New出来的,那就是临时状态,这个时候是没有OID的,Session中无,数据库记录无;

B:如果这个时候进行了保存操作,或者从数据库中加载,就会变成持久化状态,这个时候有OID,Session中有,数据库记录有;

C:处于持久化状态,如果关闭Session,就会变成游离状态,这个时候有OID,Session中无,数据库中有(如果其他程序没有把它删除);

D:从持久化状态执行delete或者游离状态执行delete,变为删除状态,这个时候有OID,Session中有或者无,数据库记录无;

其实上面按照2) 中Session和数据库记录有、无的排列组合式也是可以区分的,只是不完全合理,同时有一种情况,即Session无而且数据库记录无的情况,可能是临时状态,也可能是删除状态。

0 1
原创粉丝点击