JDO管理一个对象从创建到删除的生命周期。在它的生命周期,JDO实例不断地转换它的状态,直到最后被Java虚拟机(JVM)作为垃圾回收。状态的转换使用PersistenceManager类的方法完成,包括TransactionManager——例如makePersistent()、makeTransient()、deletePersistent()——和提交或者回滚更改。
表1显示JDO规范定义的10种状态。前面的七种是必须的,后面的三种是可选的。如果一个实现不支持某些操作,那么就不会获得三种可选的状态。
表1 JDO生命周期
| 状态 | 描述 |
| Transient | 任何使用开发者定义的构造函数创建的对象,都不包括持久化环境。一个瞬时实例没有JDO身份。 |
| Persistent-new | 被应用程序组件请求的任何对象都变为持久的,通过使用PersistenceManager类的makePersistent()。这样的一个对象将会拥有一个分配的JDO身份。 |
| Persistent-dirty | 在当前事务中被改变的持久对象。 |
| Hollow | 代表在数据存储中特定数据的持久对象,但是在它的实例中没有包含值。 |
| Persistent-clean | 代表在数据存储中的特定事务数据的持久对象,并且它们的数据在当前事务处理中还没有被改变。 |
| Persistent-deleted | 代表在数据存储中的特定数据的持久对象,并且在当前事务处理中已经被删除。 |
| Persistent-new-deleted | 在同一个事务处理中最近被持久化和删除的持久对象。 |
| Persistent-nontransactional | 代表数据存储中的数据的持久对象,当前它们的值已经被装载,但是还没有事务处理一致。 |
| Transient-client | 代表一个瞬时事务处理实例的持久对象,它们的数据在当前事务中还没有被改变。 |
| Transient-dirty | 代表一个瞬时事务处理实例的持久对象,它们的数据在当前事务中已经被改变。 |
图2显示了JDO实例各状态之间的转换。

图2 JDO实例的状态转换
本文稍后的代码片断,将示范如何执行我们刚刚讨论的操作。
