Hibernate的实例状态分为3种,分别为瞬时状态(Transient)、持久化状态(Persistent)和脱管状态(Detached)。
瞬时状态(Transient)
实体对象是通过Java中的new关键字开辟内存空间创建的Java对象,但是它并没有纳入Hibernate Session的管理中,如果没有变量对它引用,它将被Java垃圾回收器回收。瞬时状态的对象在内存中是孤立存在的,它与数据库中的数据无任何关联,仅是一个信息携带的载体。
假如一个瞬时状态对象被持久化状态对象引用,它也会自动变为持久化状态对象。
持久化状态(Persistent)
持久化状态对象存在与数据库中的数据关联,它总是与会话状态(Session)和事务(Transaction)关联在一起。当持久化状态对象发生改动时并不会立即执行数据库操作,只有当事务结束时,才会更新数据库,以便保证Hibernate的持久化对象和数据库操作的同步性。当持久化状态对象变为脱管状态对象时,它将不在Hibernate持久层的管理范围之内。
脱管状态(Detached)
当持久化状态的对象的Session关闭之后,这个对象就从持久化状态的对象变为脱管状态的对象。脱管状态的对象仍然存在与数据库中的数据关联,只是它并不在Hibernate的Session管理范围之内。如果将脱管状态的对象重新关联某个新的Session上,它将变回持久化状态对象。