<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->
<chapter id="jpa_overview_pc">
    <title>
        Entity
    </title>
    <indexterm zone="jpa_overview_pc">
        <primary>
            persistent classes
        </primary>
    </indexterm>
    <indexterm zone="jpa_overview_pc">
        <primary>
            Entity
        </primary>
        <seealso>
            persistent classes
        </seealso>
    </indexterm>
    <indexterm>
        <primary>
            class
        </primary>
        <secondary>
            persistent
        </secondary>
        <see>
            persistent classes
        </see>
    </indexterm>
    <indexterm>
        <primary>
            persistence capable
        </primary>
        <see>
            Entity
        </see>
    </indexterm>
    <para>
JPA recognizes two types of persistent classes: <emphasis>entity</emphasis>
classes and <emphasis>embeddable</emphasis> classes. Each persistent instance of
an entity class - each <emphasis>entity</emphasis> - represents a unique
datastore record. You can use the <classname>EntityManager</classname> to find
an entity by its persistent identity (covered later in this chapter), or use a
<classname>Query</classname> to find entities matching certain criteria.
    </para>
    <para>
An instance of an embeddable class, on the other hand, is only stored as part of
a separate entity. Embeddable instances have no persistent identity, and are
never returned directly from the <classname>EntityManager</classname> or from a
<classname>Query</classname> unless the query uses a projection on owning class
to the embedded instance. For example, if <classname>Address</classname> is
embedded in <classname>Company</classname>, then
a query <classname>"SELECT a FROM Address a"</classname> will never return the
embedded <classname>Address</classname> of <classname>Company</classname>;
but a projection query such as
<classname>"SELECT c.address FROM Company c"</classname> will.
    </para>
    <para>
Despite these differences, there are few distinctions between entity classes and
embeddable classes. In fact, writing either type of persistent class is a lot
like writing any other class. There are no special parent classes to
extend from, field types to use, or methods to write. This is one important way
in which JPA makes persistence transparent to you, the developer.
    </para>
    <note>
        <para>
JPA supports both fields and JavaBean properties as persistent state. For
simplicity, however, we will refer to all persistent state as persistent fields,
unless we want to note a unique aspect of persistent properties.
        </para>
    </note>
    <example id="jpa_overview_pc_pcclass">
        <title>
            Persistent Class
        </title>
<programlisting>
package org.mag;

/**
 * Example persistent class.  Notice that it looks exactly like any other
 * class.  JPA makes writing persistent classes completely transparent.
 */
public class Magazine {

    private String isbn;
    private String title;
    private Set articles = new HashSet();
    private Article coverArticle;
    private int copiesSold;
    private double price;
    private Company publisher;
    private int version;

    protected Magazine() {
    }

    public Magazine(String title, String isbn) {
        this.title = title;
        this.isbn = isbn;
    }

    public void publish(Company publisher, double price) {
        this.publisher = publisher;
        publisher.addMagazine(this);
        this.price = price;
    }

    public void sell() {
        copiesSold++;
        publisher.addRevenue(price);
    }

    public void addArticle(Article article) {
        articles.add(article);
    }

    // rest of methods omitted
}
</programlisting>
    </example>
    <section id="jpa_overview_pc_restrict">
        <title>
            Restrictions on Persistent Classes
        </title>
        <indexterm zone="jpa_overview_pc_restrict">
            <primary>
                persistent classes
            </primary>
            <secondary>
                restrictions on
            </secondary>
        </indexterm>
        <para>
There are very few restrictions placed on persistent classes. Still, it never
hurts to familiarize yourself with exactly what JPA does and does not support.
        </para>
        <section id="jpa_overview_pc_no_arg">
            <title>
                Default or No-Arg Constructor
            </title>
            <indexterm zone="jpa_overview_pc_no_arg">
                <primary>
                    persistent classes
                </primary>
                <secondary>
                    no-arg constructor requirement
                </secondary>
            </indexterm>
            <indexterm>
                <primary>
                    constructor
                </primary>
                <secondary>
                    no-arg constructor requirement
                </secondary>
            </indexterm>
            <para>
The JPA specification requires that all persistent classes have a no-arg
constructor. This constructor may be public or protected. Because the compiler
automatically creates a default no-arg constructor when no other constructor is
defined, only classes that define constructors must also include a no-arg
constructor.
            </para>
            <note>
                <para>
OpenJPA's <emphasis>enhancer</emphasis> will automatically add a protected
no-arg constructor to your class when required. Therefore, this restriction does
not apply when using the enhancer. See <xref linkend="ref_guide_pc_enhance"/>
of the Reference Guide for details.
                </para>
            </note>
        </section>
        <section id="jpa_overview_pc_final">
            <title>
                Final
            </title>
            <para>
Entity classes may not be final. No method of an entity class can be final.
            </para>
            <note>
                <para>
OpenJPA supports final classes and final methods.
                </para>
            </note>
        </section>
        <section id="jpa_overview_pc_id">
            <title>
                Identity Fields
            </title>
            <indexterm zone="jpa_overview_pc_id">
                <primary>
                    identity fields
                </primary>
                <seealso>
                    persistent fields
                </seealso>
            </indexterm>
            <indexterm zone="jpa_overview_pc_id">
                <primary>
                    persistent classes
                </primary>
                <secondary>
                    JPA id requirement
                </secondary>
            </indexterm>
            <para>
All entity classes must declare one or more fields which together form the
persistent identity of an instance. These are called <emphasis>identity
</emphasis> or <emphasis>primary key</emphasis> fields. In our <classname>
Magazine</classname> class, <literal>isbn</literal> and <literal>title</literal>
are identity fields, because no two magazine records in the datastore can have
the same <literal>isbn</literal> and <literal>title</literal> values.
<xref linkend="jpa_overview_meta_id"/> will show you how to denote your
identity fields in JPA metadata. <xref linkend="jpa_overview_pc_identity"/>
below examines persistent identity.
            </para>
            <note>
                <para>
OpenJPA fully supports identity fields, but does not require them. See
<xref linkend="ref_guide_pc_oid"/> of the Reference Guide for details.
                </para>
            </note>
        </section>
        <section id="jpa_overview_pc_version">
            <title>
                Version Field
            </title>
            <indexterm zone="jpa_overview_pc_version">
                <primary>
                    version fields
                </primary>
                <seealso>
                    persistent fields
                </seealso>
            </indexterm>
            <indexterm zone="jpa_overview_pc_version">
                <primary>
                    persistent classes
                </primary>
                <secondary>
                    JPA version requirement
                </secondary>
            </indexterm>
            <para>
The <literal>version</literal> field in our <classname>Magazine</classname>
class may seem out of place. JPA uses a version field in your entities to detect
concurrent modifications to the same datastore record. When the JPA runtime
detects an attempt to concurrently modify the same record, it throws an
exception to the transaction attempting to commit last. This prevents
overwriting the previous commit with stale data.
            </para>
            <para>
A version field is not required, but without one concurrent threads or
processes might succeed in making conflicting changes to the same record at the
same time. This is unacceptable to most applications.
<xref linkend="jpa_overview_meta_version"/> shows you how to designate a
version field in JPA metadata.
            </para>
            <para>
The version field must be an integral type (<classname> int</classname>,
<classname>Long</classname>, etc) or a <classname>
java.sql.Timestamp</classname>. You should consider version fields immutable.
Changing the field value has undefined results.
            </para>
            <note>
                <para>
OpenJPA fully supports version fields, but does not require them within the actual entity for concurrency
detection. OpenJPA can maintain surrogate version values or use state
comparisons to detect concurrent modifications. See
<xref linkend="ref_guide_mapping_jpa"/> in the Reference Guide.
                </para>
            </note>
        </section>
        <section id="jpa_overview_pc_restrict_inheritance">
            <title>
                Inheritance
            </title>
            <indexterm zone="jpa_overview_pc_restrict_inheritance">
                <primary>
                    persistent classes
                </primary>
                <secondary>
                    inheritance of
                </secondary>
                <seealso>
                    inheritance
                </seealso>
            </indexterm>
            <indexterm>
                <primary>
                    inheritance
                </primary>
                <secondary>
                    of persistent classes
                </secondary>
            </indexterm>
            <para>
JPA fully supports inheritance in persistent classes. It allows persistent
classes to inherit from non-persistent classes, persistent classes to inherit
from other persistent classes, and non-persistent classes to inherit from
persistent classes. It is even possible to form inheritance hierarchies in which
persistence skips generations. There are, however, a few important limitations:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
Persistent classes cannot inherit from certain natively-implemented system
classes such as <classname>java.net.Socket</classname> and <classname>
java.lang.Thread</classname>.
                    </para>
                </listitem>
                <listitem>
                    <para>
If a persistent class inherits from a non-persistent class, the fields of the
non-persistent superclass cannot be persisted.
                    </para>
                </listitem>
                <listitem>
                    <para>
All classes in an inheritance tree must use the same identity type. We cover
entity identity in <xref linkend="jpa_overview_pc_identity"/>.
                    </para>
                </listitem>
            </itemizedlist>
        </section>
        <section id="jpa_overview_pc_restrict_fields">
            <title>
                Persistent Fields
            </title>
            <indexterm zone="jpa_overview_pc_restrict_fields">
                <primary>
                    persistent classes
                </primary>
                <secondary>
                    field restrictions
                </secondary>
                <seealso>
                    persistent fields
                </seealso>
            </indexterm>
            <indexterm>
                <primary>
                    field
                </primary>
                <secondary>
                    persistent
                </secondary>
                <see>
                    persistent fields
                </see>
            </indexterm>
            <indexterm zone="jpa_overview_pc_restrict_fields">
                <primary>
                    persistent fields
                </primary>
                <secondary>
                    restrictions on
                </secondary>
            </indexterm>
            <para>
JPA manages the state of all persistent fields. Before you access persistent
state, the JPA runtime makes sure that it has been loaded from the datastore.
When you set a field, the runtime records that it has changed so that the new
value will be persisted. This allows you to treat the field in exactly the same
way you treat any other field - another aspect of JPA's transparency.
            </para>
            <para>
JPA does not support static or final fields. It does, however, include built-in
support for most common field types. These types can be roughly divided into
three categories: immutable types, mutable types, and relations.
            </para>
            <para>
            <indexterm>
                <primary>
                    persistent fields
                </primary>
                <secondary>
                    immutable types
                </secondary>
            </indexterm>
            <indexterm>
                <primary>
                    immutable
                </primary>
                <secondary>
                    persistent field types
                </secondary>
            </indexterm>
<emphasis>Immutable</emphasis> types, once created, cannot be changed. The only
way to alter a persistent field of an immutable type is to assign a new value to
the field. JPA supports the following immutable types:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
All primitives (<classname>int, float, byte</classname>, etc)
                    </para>
                </listitem>
                <listitem>
                    <para>
All primitive wrappers (<classname>java.lang.Integer, java.lang.Float,
java.lang.Byte</classname>, etc)
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.lang.String</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.math.BigInteger</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.math.BigDecimal</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.time.LocalDate</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.time.LocalDateTime</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.time.LocalTime</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.time.OffsetDateTime</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.time.OffsetTime</classname>
                    </para>
                </listitem>
            </itemizedlist>
            <para>
JPA also supports <classname>byte[]</classname>, <classname>Byte[]</classname>,
<classname>char[]</classname>, and <classname>Character[]</classname> as
immutable types. That is, you can persist fields of these types,
but you should not manipulate individual array indexes without resetting the
array into the persistent field.
            </para>
            <para>
            <indexterm>
                <primary>
                    persistent fields
                </primary>
                <secondary>
                    mutable types
                </secondary>
                <seealso>
                    proxies
                </seealso>
            </indexterm>
            <indexterm>
                <primary>
                    mutable
                </primary>
                <secondary>
                    persistent field types
                </secondary>
                <seealso>
                    persistent fields
                </seealso>
                <seealso>
                    proxies
                </seealso>
            </indexterm>
            <indexterm>
                <primary>
                    persistent fields
                </primary>
                <secondary>
                    user-defined types
                </secondary>
            </indexterm>
            <indexterm>
                <primary>
                    user-defined
                </primary>
                <secondary>
                    persistent field types
                </secondary>
                <seealso>
                    persistent fields
                </seealso>
            </indexterm>
Persistent fields of <emphasis>mutable</emphasis> types can be altered without
assigning the field a new value. Mutable types can be modified directly through
their own methods. The JPA specification requires that implementations support
the following mutable field types:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<classname>java.util.Date</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.util.Calendar</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.sql.Date</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.sql.Timestamp</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.sql.Time</classname>
                    </para>
                </listitem>
                <listitem>
                    <para>
Enums
                    </para>
                </listitem>
                <listitem>
                    <para>
Entity types (relations between entities)
                    </para>
                </listitem>
                <listitem>
                    <para>
Embeddable types
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.util.Collection</classname>s of entities
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.util.Set</classname>s of entities
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.util.List</classname>s of entities
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>java.util.Map</classname>s in which each entry maps the value of one
of a related entity's fields to that entity.
                    </para>
                </listitem>
            </itemizedlist>
            <para>
Collection and map types may be parameterized.
            </para>
            <para>
            <indexterm>
                <primary>
                    persistent fields
                </primary>
                <secondary>
                    of unknown types
                </secondary>
            </indexterm>
            <indexterm>
                <primary>
                    Object
                </primary>
                <secondary>
                    as persistent field type
                </secondary>
                <seealso>
                    persistent fields
                </seealso>
            </indexterm>
Most JPA implementations also have support for persisting serializable values as
binary data in the datastore. <xref linkend="jpa_overview_meta"/> has more
information on persisting serializable types.
            </para>
            <note>
                <para>
OpenJPA also supports arrays, <classname>java.lang.Number</classname>,
<classname>java.util.Locale</classname>, all JDK 1.2 <classname>Set</classname>,
<classname>List</classname>, and <classname>Map</classname> types,
and many other mutable and immutable field types. OpenJPA also allows you to
plug in support for custom types.
                </para>
            </note>
        </section>
        <section id="jpa_overview_pc_restrict_conclusion">
            <title>
                Conclusions
            </title>
            <para>
This section detailed all of the restrictions JPA places on persistent classes.
While it may seem like we presented a lot of information, you will seldom find
yourself hindered by these restrictions in practice. Additionally, there are
often ways of using JPA's other features to circumvent any limitations you run
into.
            </para>
        </section>
    </section>
    <section id="jpa_overview_pc_identity">
        <title>
            Entity Identity
        </title>
        <indexterm zone="jpa_overview_pc_identity">
            <primary>
                JPA
            </primary>
            <secondary>
                identity
            </secondary>
            <seealso>
                identity
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                entity identity
            </primary>
            <see>
                identity
            </see>
        </indexterm>
        <indexterm zone="jpa_overview_pc_identity">
            <primary>
                identity
            </primary>
            <secondary>
                JPA
            </secondary>
        </indexterm>
        <para>
        <indexterm>
            <primary>
                identity
            </primary>
            <secondary>
                numeric
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                identity
            </primary>
            <secondary>
                qualitative
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                numeric identity
            </primary>
            <seealso>
                identity
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                qualitative identity
            </primary>
            <seealso>
                identity
            </seealso>
        </indexterm>
Java recognizes two forms of object identity: numeric identity and qualitative
identity. If two references are <emphasis>numerically</emphasis> identical, then
they refer to the same JVM instance in memory. You can test for this using the
<literal>==</literal> operator. <emphasis>Qualitative</emphasis> identity, on
the other hand, relies on some user-defined criteria to determine whether two
objects are "equal". You test for qualitative identity using the <methodname>
equals</methodname> method. By default, this method simply relies on numeric
identity.
        </para>
        <para>
JPA introduces another form of object identity, called <emphasis>entity
identity</emphasis> or <emphasis>persistent identity</emphasis>. Entity
identity tests whether two persistent objects represent the same state in the
datastore.
        </para>
        <para>
        <indexterm>
            <primary>
                persistent fields
            </primary>
            <secondary>
                id
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                id
            </primary>
            <secondary>
                fields
            </secondary>
            <seealso>
                persistent fields
            </seealso>
        </indexterm>
The entity identity of each persistent instance is encapsulated in its
<emphasis>identity field(s)</emphasis>. If two entities of the same type have
the same identity field values, then the two entities represent the same state
in the datastore. Each entity's identity field values must be unique among all
other entities of the same type.
        </para>
        <para>
Identity fields must be primitives, primitive wrappers, <classname>
String</classname>s, <classname>Date</classname>s, <classname>
Timestamp</classname>s, or embeddable types.
        </para>
        <note>
            <para>
OpenJPA supports entities as identity fields, as the Reference Guide discusses
in <xref linkend="ref_guide_pc_oid_entitypk"/>.  For legacy schemas with binary
primary key columns, OpenJPA also supports using identity fields of type
<classname>byte[]</classname>. When you use a <classname>byte[]</classname>
identity field, you must create an identity class.  Identity classes are
covered below.
            </para>
        </note>
        <warning>
            <para>
Changing the fields of an embeddable instance while it is assigned to an
identity field has undefined results. Always treat embeddable identity instances
as immutable objects in your applications.
            </para>
        </warning>
        <para>
        <indexterm>
            <primary>
                identity
            </primary>
            <secondary>
                uniqueness requirement
            </secondary>
        </indexterm>
        <indexterm>
            <primary>
                uniquness requirement
            </primary>
            <seealso>
                identity
            </seealso>
        </indexterm>
If you are dealing with a single persistence context (see
<xref linkend="jpa_overview_emfactory_perscontext"/>), then you do not
have to compare identity fields to test whether two entity references represent
the same state in the datastore. There is a much easier way: the <literal>==
</literal> operator. JPA requires that each persistence context maintain only
one JVM object to represent each unique datastore record. Thus, entity identity
is equivalent to numeric identity within a persistence context. This is referred
to as the <emphasis>uniqueness requirement</emphasis>.
        </para>
        <para>
The uniqueness requirement is extremely important - without it, it would be
impossible to maintain data integrity. Think of what could happen if two
different objects in the same transaction were allowed to represent the same
persistent data. If you made different modifications to each of these objects,
which set of changes should be written to the datastore? How would your
application logic handle seeing two different "versions" of the same data?
Thanks to the uniqueness requirement, these questions do not have to be
answered.
        </para>
        <section id="jpa_overview_pc_identitycls">
            <title>
                Identity Class
            </title>
            <para>
            <indexterm zone="jpa_overview_pc_identitycls">
                <primary>
                    identity class
                </primary>
                <seealso>
                    identity
                </seealso>
            </indexterm>
            <indexterm zone="jpa_overview_pc_identitycls">
                <primary>
                    identity
                </primary>
                <secondary>
                    class requirements
                </secondary>
            </indexterm>
If your entity has only one identity field, you can use the value of that field
as the entity's identity object in all <link linkend="jpa_overview_em">
<classname>EntityManager</classname></link> APIs. Otherwise, you must supply an
identity class to use for identity objects. Your identity class must meet the
following criteria:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
The class must be public.
                    </para>
                </listitem>
                <listitem>
                    <para>
The class must be serializable.
                    </para>
                </listitem>
                <listitem>
                    <para>
The class must have a public no-args constructor.
                    </para>
                </listitem>
                <listitem>
                    <para>
The names of the non-static fields or properties of the class must be the same
as the names of the identity fields or properties of the corresponding entity
class, and the types must be identical.
                    </para>
                </listitem>
                <listitem>
                    <para>
The <methodname>equals</methodname> and <methodname>hashCode</methodname>
methods of the class must use the values of all fields or properties
corresponding to identity fields or properties in the entity class.
                    </para>
                </listitem>
                <listitem>
                    <para>
If the class is an inner class, it must be <literal>static</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
All entity classes related by inheritance must use the same identity class, or
else each entity class must have its own identity class whose inheritance
hierarchy mirrors the inheritance hierarchy of the owning entity classes (see
<xref linkend="jpa_overview_pc_identity_hierarchy"/>).
                    </para>
                </listitem>
            </itemizedlist>
            <note>
                <para>
Though you may still create identity classes by hand, OpenJPA provides the
<classname>appidtool</classname> to automatically generate proper identity
classes based on your identity fields. See
<xref linkend="ref_guide_pc_oid_application"/> of the Reference Guide.
                </para>
            </note>
            <example id="jpa_overview_pc_identity_appidcode">
                <title>
                    Identity Class
                </title>
                <para>
This example illustrates a proper identity class for an entity with multiple
identity fields.
                </para>
<programlisting>
/**
 * Persistent class using application identity.
 */
public class Magazine {

    private String isbn;    // identity field
    private String title;   // identity field

    // rest of fields and methods omitted


    /**
     * Application identity class for Magazine.
     */
    public static class MagazineId {

        // each identity field in the Magazine class must have a
        // corresponding field in the identity class
        public String isbn;
        public String title;

        /**
         * Equality must be implemented in terms of identity field
         * equality, and must use instanceof rather than comparing
         * classes directly (some JPA implementations may subclass the
         * identity class).
         */
        public boolean equals(Object other) {
            if (other == this)
                return true;
            if (!(other instanceof MagazineId))
                return false;

            MagazineId mi = (MagazineId) other;
            return (isbn == mi.isbn
                || (isbn != null &amp;&amp; isbn.equals(mi.isbn)))
                &amp;&amp; (title == mi.title
                || (title != null &amp;&amp; title.equals(mi.title)));
        }

        /**
         * Hashcode must also depend on identity values.
         */
        public int hashCode() {
            return ((isbn == null) ? 0 : isbn.hashCode())
                ^ ((title == null) ? 0 : title.hashCode());
        }

        public String toString() {
            return isbn + ":" + title;
        }
    }
}
</programlisting>
            </example>
            <section id="jpa_overview_pc_identity_hierarchy">
                <title>
                    Identity Hierarchies
                </title>
                <indexterm zone="jpa_overview_pc_identity_hierarchy">
                    <primary>
                        identity
                    </primary>
                    <secondary>
                        hierarchy
                    </secondary>
                </indexterm>
                <mediaobject>
                    <imageobject>
                        <!-- PNG image data, 320 x 267 (see README) -->
                        <imagedata fileref="img/appid-hierarchy.png" width="213px"/>

                    </imageobject>
                </mediaobject>
                <para>
An alternative to having a single identity class for an entire inheritance
hierarchy is to have one identity class per level in the inheritance hierarchy.
The requirements for using a hierarchy of identity classes are as follows:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
The inheritance hierarchy of identity classes must exactly mirror the hierarchy
of the persistent classes that they identify. In the example pictured above,
abstract class <classname>Person</classname> is extended by abstract class
<classname>Employee</classname>, which is extended by non-abstract class
<classname> FullTimeEmployee</classname>, which is extended by non-abstract
class <classname>Manager</classname>. The corresponding identity classes, then,
are an abstract <classname>PersonId</classname> class, extended by an abstract
<classname>EmployeeId</classname> class, extended by a non-abstract <classname>
FullTimeEmployeeId</classname> class, extended by a non-abstract <classname>
ManagerId</classname> class.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
Subclasses in the identity hierarchy may define additional identity fields until
the hierarchy becomes non-abstract. In the aforementioned example, <classname>
Person</classname> defines an identity field <literal>ssn</literal>, <classname>
Employee</classname> defines additional identity field <literal>userName
</literal>, and <classname>FullTimeEmployee</classname> adds a final identity
field, <literal>empId</literal>. However, <classname>Manager</classname> may not
define any additional identity fields, since it is a subclass of a non-abstract
class. The hierarchy of identity classes, of course, must match the identity
field definitions of the persistent class hierarchy.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
It is not necessary for each abstract class to declare identity fields. In the
previous example, the abstract <classname>Person</classname> and <classname>
Employee</classname> classes could declare no identity fields, and the first
concrete subclass <classname>FullTimeEmployee</classname> could define one or
more identity fields.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
All subclasses of a concrete identity class must be <methodname>equals
</methodname> and <methodname>hashCode</methodname>-compatible with the
concrete superclass. This means that in our example, a <classname>ManagerId
</classname> instance and a <classname>FullTimeEmployeeId</classname> instance
with the same identity field values should have the same hash code, and should
compare equal to each other using the <methodname>equals</methodname> method of
either one. In practice, this requirement reduces to the following coding
practices:
                        </para>
                        <orderedlist>
                            <listitem>
                                <para>
Use <literal>instanceof</literal> instead of comparing <classname>Class
</classname> objects in the <methodname>equals</methodname> methods of your
identity classes.
                                </para>
                            </listitem>
                            <listitem>
                                <para>
An identity class that extends another non-abstract identity class should not
override <methodname>equals</methodname> or <methodname>hashCode</methodname>.
                                </para>
                            </listitem>
                        </orderedlist>
                    </listitem>
                </itemizedlist>
            </section>
        </section>
    </section>
    <section id="jpa_overview_pc_callbacks">
        <title>
            Lifecycle Callbacks
        </title>
        <indexterm zone="jpa_overview_pc_callbacks">
            <primary>
                lifecycle callbacks
            </primary>
        </indexterm>
        <indexterm zone="jpa_overview_pc_callbacks">
            <primary>
                persistent classes
            </primary>
            <secondary>
                lifecycle callbacks
            </secondary>
            <seealso>
                lifecycle callbacks
            </seealso>
        </indexterm>
        <para>
It is often necessary to perform various actions at different stages of a
persistent object's lifecycle. JPA includes a variety of callbacks methods for
monitoring changes in the lifecycle of your persistent objects. These callbacks
can be defined on the persistent classes themselves and on non-persistent
listener classes.
        </para>
        <section id="jpa_overview_pc_callbacks_methods">
            <title>
                Callback Methods
            </title>
            <indexterm zone="jpa_overview_pc_callbacks_methods">
                <primary>
                    lifecycle callbacks
                </primary>
                <secondary>
                    callback methods
                </secondary>
            </indexterm>
            <indexterm zone="jpa_overview_pc_callbacks_methods">
                <primary>
                    entity
                </primary>
                <secondary>
                    callback methods
                </secondary>
            </indexterm>
            <para>
Every persistence event has a corresponding callback method marker. These
markers are shared between persistent classes and their listeners. You can use
these markers to designate a method for callback either by annotating that
method or by listing the method in the XML mapping file for a given class. The
lifecycle events and their corresponding method markers are:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PrePersist
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PrePersist.html">
<classname>PrePersist</classname></ulink>: Methods marked with this annotation
will be invoked before an object is persisted. This could be used for assigning
primary key values to persistent objects. This is equivalent to the XML element
tag <literal>pre-persist</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PostPersist
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PostPersist.html">
<classname>PostPersist</classname></ulink>: Methods marked with this annotation
will be invoked after an object has transitioned to the persistent state. You
might want to use such methods to update a screen after a new row is added. This
is equivalent to the XML element tag <literal>post-persist</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PostLoad
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PostLoad.html">
<classname>PostLoad</classname></ulink>: Methods marked with this annotation
will be invoked after all eagerly fetched fields of your class have been loaded
from the datastore. No other persistent fields can be accessed in this method.
This is equivalent to the XML element tag <literal>post-load</literal>.
                    </para>
                    <para>
<classname>PostLoad</classname> is often used to initialize non-persistent
fields whose values depend on the values of persistent fields, such as a complex
data structure.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PreUpdate
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PreUpdate.html">
<classname>PreUpdate</classname></ulink>: Methods marked with this annotation
will be invoked just the persistent values in your objects are flushed to the
datastore. This is equivalent to the XML element tag <literal>
pre-update</literal>.
                    </para>
                    <para>
<classname>PreUpdate</classname> is the complement to <classname>PostLoad
</classname>. While methods marked with <classname>PostLoad</classname> are most
often used to initialize non-persistent values from persistent data, methods
annotated with <classname>PreUpdate</classname> is normally used to set
persistent fields with information cached in non-persistent data.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PostUpdate
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PostUpdate.html">
<classname>PostUpdate</classname></ulink>: Methods marked with this annotation
will be invoked after changes to a given instance have been stored to the
datastore. This is useful for clearing stale data cached at the application
layer. This is equivalent to the XML element tag <literal>post-update</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PreRemove
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PreRemove.html">
<classname>PreRemove</classname></ulink>: Methods marked with this annotation
will be invoked before an object transactions to the deleted state. Access to
persistent fields is valid within this method. You might use this method to
cascade the deletion to related objects based on complex criteria, or to perform
other cleanup. This is equivalent to the XML element tag <literal>
pre-remove</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                    <indexterm>
                        <primary>
                            PostRemove
                        </primary>
                        <seealso>
                            lifecycle callbacks
                        </seealso>
                    </indexterm>
<ulink url="http://download.oracle.com/javaee/6/api/javax/persistence/PostRemove.html">
<classname>PostRemove</classname></ulink>: Methods marked with this annotation
will be invoked after an object has been marked as to be deleted. This is
equivalent to the XML element tag <literal>post-remove</literal>.
                    </para>
                </listitem>
            </itemizedlist>
        </section>
        <section id="jpa_overview_callbacks_using">
            <title>
                Using Callback Methods
            </title>
            <para>
When declaring callback methods on a persistent class, any method may be used
which takes no arguments and is not shared with any property access fields.
Multiple events can be assigned to a single method as well.
            </para>
            <para>
Below is an example of how to declare callback methods on persistent classes:
            </para>
<programlisting>
/**
 * Example persistent class declaring our entity listener.
 */
@Entity
public class Magazine {

    @Transient
    private byte[][] data;

    @ManyToMany
    private List&lt;Photo&gt; photos;

    @PostLoad
    public void convertPhotos() {
        data = new byte[photos.size()][];
        for (int i = 0; i &lt; photos.size(); i++)
            data[i] = photos.get(i).toByteArray();
    }

    @PreDelete
    public void logMagazineDeletion() {
        getLog().debug("deleting magazine containing" + photos.size()
            + " photos.");
    }
}

</programlisting>
            <para>
In an XML mapping file, we can define the same methods without annotations:
            </para>
<programlisting>
&lt;entity class="Magazine"&gt;
    &lt;pre-remove&gt;logMagazineDeletion&lt;/pre-remove&gt;
    &lt;post-load&gt;convertPhotos&lt;/post-load&gt;
&lt;/entity&gt;
</programlisting>
            <note>
                <para>
We fully explore persistence metadata annotations and XML in
<xref linkend="jpa_overview_meta"/>.
                </para>
            </note>
        </section>
        <section id="jpa_overview_entity_listeners_using">
            <title>
                Using Entity Listeners
            </title>
            <para>
Mixing lifecycle event code into your persistent classes is not always ideal. It
is often more elegant to handle cross-cutting lifecycle events in a
non-persistent listener class. JPA allows for this, requiring only that listener
classes have a public no-arg constructor. Like persistent classes, your listener
classes can consume any number of callbacks. The callback methods must take in a
single <classname>java.lang.Object</classname> argument which represents the
persistent object that triggered the event.
            </para>
            <para>
Entities can enumerate listeners using the <classname>EntityListeners
</classname> annotation. This annotation takes an array of listener classes as
its value.
            </para>
            <para>
Below is an example of how to declare an entity and its corresponding listener
classes.
            </para>
<programlisting>
/**
 * Example persistent class declaring our entity listener.
 */
@Entity
@EntityListeners({ MagazineLogger.class, ... })
public class Magazine {

    // ... //
}


/**
 * Example entity listener.
 */
public class MagazineLogger {

    @PostPersist
    public void logAddition(Object pc) {
        getLog().debug("Added new magazine:" + ((Magazine) pc).getTitle());
    }


    @PreRemove
    public void logDeletion(Object pc) {
        getLog().debug("Removing from circulation:" +
            ((Magazine) pc).getTitle());
    }
}
</programlisting>
            <para>
In XML, we define both the listeners and their callback methods as so:
            </para>
<programlisting>
&lt;entity class="Magazine"&gt;
    &lt;entity-listeners&gt;
        &lt;entity-listener class="MagazineLogger"&gt;
            &lt;post-persist&gt;logAddition&lt;/post-persist&gt;
            &lt;pre-remove&gt;logDeletion&lt;/pre-remove&gt;
        &lt;/entity-listener&gt;
    &lt;/entity-listeners&gt;
&lt;/entity&gt;
</programlisting>
        </section>
        <section id="jpa_overview_entity_listeners_exclude">
            <title>
                Entity Listeners Hierarchy
            </title>
            <indexterm zone="jpa_overview_entity_listeners_exclude">
                <primary>
                    lifecycle listeners
                </primary>
                <secondary>
                    hierarchy
                </secondary>
            </indexterm>
            <para>
Entity listener methods are invoked in a specific order when a given event is
fired. So-called <emphasis>default</emphasis> listeners are invoked first: these
are listeners which have been defined in a package annotation or in the root
element of XML mapping files. Next, entity listeners are invoked in the order of
the inheritance hierarchy, with superclass listeners being invoked before
subclass listeners. Finally, if an entity has multiple listeners for the same
event, the listeners are invoked in declaration order.
            </para>
            <para>
You can exclude default listeners and listeners defined in superclasses from the
invocation chain through the use of two class-level annotations:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<classname>ExcludeDefaultListeners</classname>: This annotation indicates that
no default listeners will be invoked for this class, or any of its subclasses.
The XML equivalent is the empty <literal>exclude-default-listeners</literal>
element.
                    </para>
                </listitem>
                <listitem>
                    <para>
<classname>ExcludeSuperclassListeners</classname>: This annotation will cause
OpenJPA to skip invoking any listeners declared in superclasses. The XML
equivalent is the empty <literal>exclude-superclass-listeners</literal> element.
                    </para>
                </listitem>
            </itemizedlist>
        </section>
    </section>
    <section id="jpa_overview_pc_conclusion">
        <title>
            Conclusions
        </title>
        <para>
This chapter covered everything you need to know to write persistent class
definitions in JPA. JPA cannot use your persistent classes, however, until you
complete one additional step: you must define the persistence metadata. The next
chapter explores metadata in detail.
        </para>
    </section>
</chapter>
