<html><head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   <title>2.&nbsp; Entity Lifecycle Management</title><base href="display"><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"><link rel="home" href="manual.html" title="Apache OpenJPA 2.2 User's Guide"><link rel="up" href="jpa_overview_em.html" title="Chapter&nbsp;8.&nbsp; EntityManager"><link rel="prev" href="jpa_overview_em.html" title="Chapter&nbsp;8.&nbsp; EntityManager"><link rel="next" href="jpa_overview_em_lifeexamples.html" title="3.&nbsp; Lifecycle Examples"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.&nbsp;
            Entity Lifecycle Management
        </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="jpa_overview_em.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;8.&nbsp;
        EntityManager
    </th><td width="20%" align="right">&nbsp;<a accesskey="n" href="jpa_overview_em_lifeexamples.html">Next</a></td></tr></table><hr></div><div class="section" title="2.&nbsp; Entity Lifecycle Management"><div class="titlepage"><div><div><h2 class="title" style="clear: both" id="jpa_overview_em_lifecycle">2.&nbsp;
            Entity Lifecycle Management
        </h2></div></div></div>
        
        <a class="indexterm" name="d5e2364"></a>
        <p>
<code class="classname">EntityManager</code>s perform several actions that affect the
lifecycle state of entity instances.
        </p>
<pre class="programlisting">
public void persist(Object entity);
</pre>
        <p>
        <a class="indexterm" name="d5e2371"></a>
        <a class="indexterm" name="d5e2374"></a>
        <a class="indexterm" name="d5e2377"></a>
Transitions new instances to managed. On the next flush or commit, the newly
persisted instances will be inserted into the datastore.
        </p>
        <p>
For a given entity <code class="literal">A</code>, the <code class="methodname">persist</code>
method behaves as follows:
        </p>
        <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                <p>
If <code class="literal">A</code> is a new entity, it becomes managed.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is an existing managed entity, it is ignored. However,
the persist operation cascades as defined below.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a removed entity, it becomes managed.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a detached entity, an <code class="classname">
IllegalArgumentException</code> is thrown.
                </p>
            </li><li class="listitem">
                <p>
The persist operation recurses on all relation fields of <code class="literal">A</code>
whose <a class="link" href="jpa_overview_meta_field.html#jpa_overview_meta_cascade" title="2.9.1.&nbsp; Cascade Type">cascades</a> include
<code class="literal">CascadeType.PERSIST</code>.
                </p>
            </li></ul></div>
        <p>
This action can only be used in the context of an active transaction.
        </p>
<pre class="programlisting">
public void remove(Object entity);
</pre>
        <p>
        <a class="indexterm" name="d5e2405"></a>
        <a class="indexterm" name="d5e2408"></a>
        <a class="indexterm" name="d5e2411"></a>
Transitions managed instances to removed. The instances will be deleted from the
datastore on the next flush or commit. Accessing a removed entity has undefined
results.
        </p>
        <p>
For a given entity <code class="literal">A</code>, the <code class="methodname">remove</code>
method behaves as follows:
        </p>
        <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                <p>
If <code class="literal">A</code> is a new entity, it is ignored. However, the remove
operation cascades as defined below.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is an existing managed entity, it becomes removed.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a removed entity, it is ignored.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a detached entity, an <code class="classname">
IllegalArgumentException</code> is thrown.
                </p>
            </li><li class="listitem">
                <p>
The remove operation recurses on all relation fields of <code class="literal">A</code>
whose <a class="link" href="jpa_overview_meta_field.html#jpa_overview_meta_cascade" title="2.9.1.&nbsp; Cascade Type">cascades</a> include
<code class="literal">CascadeType.REMOVE</code>.
                </p>
            </li></ul></div>
        <p>
This action can only be used in the context of an active transaction.
        </p>
<pre class="programlisting">
public void refresh(Object entity);
</pre>
        <p>
        <a class="indexterm" name="d5e2439"></a>
        <a class="indexterm" name="d5e2442"></a>
        <a class="indexterm" name="d5e2445"></a>
        <a class="indexterm" name="d5e2448"></a>
Use the <code class="methodname">refresh</code> action to make sure the persistent
state of an instance is synchronized with the values in the datastore.
<code class="methodname">refresh</code> is intended for long-running optimistic
transactions in which there is a danger of seeing stale data.
        </p>
        <p>
For a given entity <code class="literal">A</code>, the <code class="methodname">refresh</code>
method behaves as follows:
        </p>
        <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                <p>
If <code class="literal">A</code> is a new entity, it is ignored. However, the refresh
operation cascades as defined below.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is an existing managed entity, its state is refreshed
from the datastore.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a removed entity, it is ignored.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a detached entity, an <code class="classname">
IllegalArgumentException</code> is thrown.
                </p>
            </li><li class="listitem">
                <p>
The refresh operation recurses on all relation fields of <code class="literal">A</code>
whose <a class="link" href="jpa_overview_meta_field.html#jpa_overview_meta_cascade" title="2.9.1.&nbsp; Cascade Type">cascades</a> include
<code class="literal">CascadeType.REFRESH</code>.
                </p>
            </li></ul></div>
<pre class="programlisting">
public Object merge(Object entity);
</pre>
        <p>
        <a class="indexterm" name="d5e2477"></a>
        <a class="indexterm" name="d5e2481"></a>
        <a class="indexterm" name="d5e2484"></a>
        <a class="indexterm" name="d5e2487"></a>
        <a class="indexterm" name="d5e2489"></a>
A common use case for an application running in a servlet or application server
is to "detach" objects from all server resources, modify them, and then "attach"
them again. For example, a servlet might store persistent data in a user session
between a modification based on a series of web forms. Between each form
request, the web container might decide to serialize the session, requiring that
the stored persistent state be disassociated from any other resources.
Similarly, a client/server application might transfer persistent objects to a
client via serialization, allow the client to modify their state, and then have
the client return the modified data in order to be saved. This is sometimes
referred to as the <span class="emphasis"><em>data transfer object</em></span> or <span class="emphasis"><em>value
object</em></span> pattern, and it allows fine-grained manipulation of data
objects without incurring the overhead of multiple remote method invocations.
        </p>
        <p>
JPA provides support for this pattern by automatically detaching
entities when they are serialized or when a persistence context ends (see
<a class="xref" href="jpa_overview_emfactory_perscontext.html" title="3.&nbsp; Persistence Context">Section&nbsp;3, &#8220;
            Persistence Context
        &#8221;</a> for an exploration of
persistence contexts). The JPA <span class="emphasis"><em>merge</em></span> API
re-attaches detached entities. This allows you to detach a persistent instance,
modify the detached instance offline, and merge the instance back into an
<code class="classname">EntityManager</code> (either the same one that detached the
instance, or a new one). The changes will then be applied to the existing
instance from the datastore.
        </p>
        <p>
A detached entity maintains its persistent identity, but cannot load additional
state from the datastore. Accessing any persistent field or property that was
not loaded at the time of detachment has undefined results. Also, be sure not to
alter the version or identity fields of detached instances if you plan on
merging them later.
        </p>
        <p>
The <code class="methodname">merge</code> method returns a managed copy of the given
detached entity. Changes made to the persistent state of the detached entity are
applied to this managed instance. Because merging involves changing persistent
state, you can only merge within a transaction.
        </p>
        <p>
If you attempt to merge an instance whose representation has changed in the
datastore since detachment, the merge operation will throw an exception, or the
transaction in which you perform the merge will fail on commit, just as if a
normal optimistic conflict were detected.
        </p>
        <div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
            <p>
OpenJPA offers enhancements to JPA detachment functionality,
including additional options to control which fields are detached. See
<a class="xref" href="ref_guide_remote.html#ref_guide_detach" title="1.&nbsp; Detach and Attach">Section&nbsp;1, &#8220;
            Detach and Attach
        &#8221;</a> in the Reference Guide for details.
            </p>
        </div>
        <p>
For a given entity <code class="literal">A</code>, the <code class="methodname">merge</code>
method behaves as follows:
        </p>
        <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                <p>
If <code class="literal">A</code> is a detached entity, its state is copied into existing
managed instance <code class="literal">A'</code> of the same entity identity, or a new
managed copy of <code class="literal">A</code> is created.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a new entity, a new managed entity <code class="literal">A'
</code> is created and the state of <code class="literal">A</code> is copied into
<code class="literal">A'</code>.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is an existing managed entity, it is ignored. However,
the merge operation still cascades as defined below.
                </p>
            </li><li class="listitem">
                <p>
If <code class="literal">A</code> is a removed entity, an <code class="classname">
IllegalArgumentException</code> is thrown.
                </p>
            </li><li class="listitem">
                <p>
The merge operation recurses on all relation fields of <code class="literal">A</code>
whose <a class="link" href="jpa_overview_meta_field.html#jpa_overview_meta_cascade" title="2.9.1.&nbsp; Cascade Type">cascades</a> include
<code class="literal">CascadeType.MERGE</code>.
                </p>
            </li></ul></div>
        <p>
The following diagram illustrates the lifecycle of an entity with respect to the
APIs presented in this section.
        </p>
        <div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" cellspacing="0" cellpadding="0" width="297"><tr><td><img src="img/jpa-state-transitions.png"></td></tr></table></div>
    </div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="jpa_overview_em.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="jpa_overview_em.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="jpa_overview_em_lifeexamples.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;8.&nbsp;
        EntityManager
    &nbsp;</td><td width="20%" align="center"><a accesskey="h" href="manual.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;3.&nbsp;
            Lifecycle Examples
        </td></tr></table></div></body></html>