A lifecycle of a persistent object can be represented as a number of states and transitions between them. These states are formally defined as "int" constants in org.apache.cayenne.PersistenceState class. Transitions between states (see the diagram below) occur in response to the application interacting with either persistent objects or Cayenne context. Whenever a transition occurs, Cayenne automatically updates "persistenceState" property of all affected objects by calling setPersistenceState().

A new object state transformations:

A fetched or committed object state transformations:

The states are defined as follows:

State Value Description
TRANSIENT 1 The object is not registered in a DataContext and will not persist.
NEW 2 The object is freshly registered in a DataContext, but has not been persisted to the database (there is no matching database record).
COMMITTED 3 The object is registered in a DataContext and has been persisted to the database (there is a matching database record).
MODIFIED 4 The object is registered in a DataContext and there is a matching database record and the object has been modified in memory, but the changes have not yet been persisted back to the database.
HOLLOW 5 The object is registered in a DataContext and has a corresponding database row, but the values have not yet been fetched from the database. The values will be fetched/faulted from the database automatically by Cayenne if any fields are requested from the object.
DELETED 6 The object is registered in a DataContext and will be deleted from the database upon commit.