在.NET下,当我们new一个对象,就开始了该对象的生命周期,当我们没有再使用它的时候。它会被GC回收,从而结束它的生命周期。在NHibernate下,对于需要被持久化的对象,其有三种状态。
临时状态:刚刚使用new关键字进行创建,并还没进行持久化。注意,这里的持久化并不是单独唯一指已经将数据插入到数据库中,而是指将数据放入Session中,或者放入数据库中,或者都存在这两者当中,因为有时数据放入session中并不是立即插入数据库。这一点再后面进行讨论。其具有以下特征:
1.不处于Session当中,没有和任何一个Session关联。
2.在数据库中没有该对象对应的记录。
以下操作会使一个对象进入临时状态:
1.通过关键字new一个对象。
2.通过session的delete方法,对于一个持久化对象,delete会从数据库和session中删除记录。对于游离对象,之会从数据库中删除对象,因为在session中并没有存在要删除的对象。
持久化状态:已经被持久化,加入到Session缓存当中。持久化对象 具有以下特征:
1.总是被一个Session关联
2.持久对象和数据库中的相关记录做对应
3.在清理Session缓存的时候,会根据session中持久化对象的属性是否有变化来进行同步更新数据库
4.Session的save方法能将临时对象转换为持久化对象
5.Session的load方法或者get方法返回的对象总是处理持久化对象,Session的CreateQuery方法返回的List集合中存放的都是持久化对象。
6.Session的update和saveorupdate方法能将游离对象转换为持久化对象。
7.当一个持久化对象关联到一个临时对象的时候,在允许级联更新的情况下,Session在清理缓存的时候也会将这个临时变量转变为持久化对象。
游离对象:已经被持久化到数据库中,但是不在Session中。