ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 10.1\. Hibernate对象状态(object states) Hibernate定义并支持下列对象状态(state): * _瞬时(Transient)_ - 由`new`操作符创建,且尚未与Hibernate `Session` 关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。 如果瞬时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁。 使用Hibernate `Session`可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句) * _持久(Persistent)_ - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的`Session`作用范围内。 Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。 开发者不需要手动执行`UPDATE`。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行`DELETE`语句。 * _脱管(Detached)_ - 与持久(Persistent)对象关联的`Session`被关闭后,对象就变为脱管(Detached)的。 对脱管(Detached)对象的引用依然有效,对象可继续被修改。脱管(Detached)对象如果重新关联到某个新的`Session`上, 会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。 这个功能使得一种编程模型,即中间会给用户思考时间(user think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。 我们称之为_应用程序事务_,即从用户观点看是一个操作单元(unit of work)。 接下来我们来细致的讨论下状态(states)及状态间的转换(state transitions)(以及触发状态转换的Hibernate方法)。