这三个状态的准确含义是:
瞬态,对象的id是unsaved-value指定的值
持久态,对象的id不是unsaved-value指定的值,并且当前正在一个session里
分离态,对象的id不是unsaved-value指定的值,并且当前不在任何session里
它不是从与记录的对应关系角度来说的在持久态时,nh保证标识一致性,也就是说:user1.Id == user2.Id 等价于 user1 == user2,
持久态的对象通常有一个对应记录,但未必一定有对应记录,当使用hilo策略生成id时,nh可以先分配id而不需立即发出insert语句,会出现短时间内有id而没有对应记录的情况

解决方案 »

  1.   


    这三个状态的准确含义是:
    瞬态,对象的id是unsaved-value指定的值
    持久态,对象的id不是unsaved-value指定的值,并且当前正在一个session里
    分离态,对象的id不是unsaved-value指定的值,并且当前不在任何session里
    它不是从与记录的对应关系角度来说的在持久态时,nh保证标识一致性,也就是说:user1.Id == user2.Id 等价于 user1 == user2,
    持久态的对象通常有一个对应记录,但未必一定有对应记录,当使用hilo策略生成id时,nh可以先分配id而不需立即发出insert语句,会出现短时间内有id而没有对应记录的情况也就是说,调用session.Save(user)的时候,只是向session的缓存区中放入了id和对应的user的引用,而没有真正的存到数据库,而是在commit或者flush的时候才到数据库,对吗?
      

  2.   

    差不多可以这么理解,还取决于你怎么配id,如果用identity,那么会立即发出 insert + select scope_identity()以获取id,如果用hilo或uuid,则不需要立即发出insert