Hibernate is a full object/relational mapping solution that not only shields
the developer from the details of the underlying database management
system, but also offers state management of objects. This is,
contrary to the management of SQL statements
in common JDBC/SQL
persistence layers, a very natural object-oriented view of persistence in Java
applications.
In other words, Hibernate application developers should always think about the state of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system.
Hibernate defines and supports the following object states:
Transient - an object is transient if it has just
been instantiated using the new
operator, and it
is not associated with a Hibernate Session
. It has no
persistent representation in the database and no identifier value has been
assigned. Transient instances will be destroyed by the garbage collector if
the application doesn't hold a reference anymore. Use the Hibernate
Session
to make an object persistent (and let Hibernate
take care of the SQL statements that need to be executed for this transition).
Persistent - a persistent instance has a representation
in the database and an identifier value. It might just have been saved or loaded,
however, it is by definition in the scope of a Session
.
Hibernate will detect any changes made to an object in persistent state and
synchronize the state with the database when the unit of work completes.
Developers don't execute manual UPDATE
statements, or
DELETE
statements when an object should be made transient.
Detached - a detached instance is an object that has been
persistent, but its Session
has been closed. The reference
to the object is still valid, of course, and the detached instance might even
be modified in this state. A detached instance can be reattached to a new
Session
at a later point in time, making it (and all the
modifications) persistent again. This feature enables a programming model for
long running units of work that require user think-time. We call them
application transactions, i.e. a unit of work from the
point of view of the user.
We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail.