日期:2014-05-17  浏览次数:20514 次

NHibernate的持久化对象问题
NHibernate中对象有3中状态,瞬时,持久,托管。
当session.Save(user)的时候,user指向的对象是持久化状态,但是这是其实数据库中并没有语气对应的记录,
而是session.flush()或者session.Close()的时候才提交到数据库。

所以说,持久化对象与瞬时对象一样,在数据库中都没有语气完全匹配的记录,对么?

你们怎么看?

------解决方案--------------------
引用:
当session.Save(user)的时候,user指向的对象是持久化状态,但是这是其实数据库中并没有语气对应的记录,
而是session.flush()或者session.Close()的时候才提交到数据库。

所以说,持久化对象与瞬时对象一样,在数据库中都没有语气完全匹配的记录,对么?


这三个状态的准确含义是:
瞬态,对象的id是unsaved-value指定的值
持久态,对象的id不是unsaved-value指定的值,并且当前正在一个session里
分离态,对象的id不是unsaved-value指定的值,并且当前不在任何session里
它不是从与记录的对应关系角度来说的

在持久态时,nh保证标识一致性,也就是说:user1.Id == user2.Id 等价于 user1 == user2,
持久态的对象通常有一个对应记录,但未必一定有对应记录,当使用hilo策略生成id时,nh可以先分配id而不需立即发出insert语句,会出现短时间内有id而没有对应记录的情况