理解Hibernate的三种实例状态

Hibernate的实例状态分为三种,分别是瞬时状态(Transient)持久化状态(Persistent)和脱管状态(Detached),理解这三种不同的实例状态对理解Hibernate的session用法非常有用,今天我们就来深入探析一下这三种状态。

瞬时状态(Transient)

我们通过new关键字新建一个Java对象时, 这个对象还仅仅是存在于内存之中, 并没有纳入Hibernate Session的管理中。它与数据库中的数据没有任何联系,仅仅是一个信息的携带体。

持久化状态(Persistent)

比瞬时状态更进一步,产生了与数据库中数据的关联。可以通过get(),load(),save()等操作获得。但是要注意,当持久化状态的对象发生改动的时候并不会立即执行数据库操作,只有当事务结束时(commit()方法),才会更新数据库。当持久化状态的对象变成脱管状态时, 他将不再在hibernate持久层的管理范围之内。

脱管状态(Detached)

当持久化的对象的Session关闭时,这个对象就从持久化状态转变为脱管状态了,所以这里的”脱“是脱离的“脱”。脱管状态的对象仍然存在与数据库的关联,只是他并不在任何Session的管理范围内,如果将脱管的某个对象重新与一个Session关联(通过update()等),他将会变回持久化状态。

你可能感兴趣的:(web)