<?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="ref_guide_mapping">
    <title>
        Mapping
    </title>
    <indexterm zone="ref_guide_mapping">
        <primary>
            mapping metadata
        </primary>
    </indexterm>
    <para>
The JPA Overview's <xref linkend="jpa_overview_mapping"/> explains
object-relational mapping under JPA. This chapter reviews the mapping utilities
OpenJPA provides and examines OpenJPA features that go beyond the JPA
specification.
    </para>
    <section id="ref_guide_mapping_mappingtool">
        <title>
            Forward Mapping
        </title>
        <indexterm zone="ref_guide_mapping_mappingtool">
            <primary>
                forward mapping
            </primary>
        </indexterm>
        <indexterm zone="ref_guide_mapping_mappingtool">
            <primary>
                mapping tool
            </primary>
            <seealso>
                forward mapping
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                mapping metadata
            </primary>
            <secondary>
                forward mapping
            </secondary>
            <see>
                forward mapping
            </see>
        </indexterm>
        <para>
<emphasis>Forward mapping</emphasis> is the process of creating mappings and
their corresponding database schema from your object model. OpenJPA supports
forward mapping through the <emphasis>mapping tool</emphasis>. The next section
presents several common mapping tool use cases. You can invoke the tool through
its Java class,
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/MappingTool"><classname>
org.apache.openjpa.jdbc.meta.MappingTool</classname></ulink>.
        </para>
        <note>
            <para>
<xref linkend="ref_guide_integration_mappingtool"/> describes the mapping
tool Ant task.
            </para>
        </note>
        <example id="ref_guide_mapping_mappingtool_typical">
            <title>
                Using the Mapping Tool
            </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool Magazine.java
</programlisting>
        </example>
        <para>
In addition to the universal flags of the
<link linkend="ref_guide_conf_devtools">configuration framework</link>, the
mapping tool accepts the following command line arguments:
        </para>
        <itemizedlist>
            <listitem>
                <para>
<literal>-schemaAction/-sa &lt;add | refresh | drop | build | retain | reflect | createDB | dropDB | import | export | none&gt;
</literal>: The action to take on the schema. These options correspond to the
same-named actions on the schema tool described in
<xref linkend="ref_guide_schema_schematool"/>. Actions can be composed in a
comma-separated list. Unless you are running the mapping tool on all of
your persistent types at once or dropping a mapping, we strongly
recommend you use the default <literal>add</literal> action or the
<literal>build</literal> action. Otherwise you may end up inadvertently
dropping schema components that are used by classes you are not
currently running the tool over.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-schemaFile/-sf &lt;stdout | output file&gt;</literal>: Use this
option to write the planned schema to an XML document rather than modify the
database. The document can then be manipulated and committed to the database
with the <link linkend="ref_guide_schema_schematool"> schema tool</link>.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-sqlFile/-sql &lt;stdout | output file&gt;</literal>: Use this option
to write the planned schema modifications to a SQL script rather than modify the
database. Combine this with a <literal>schemaAction</literal> of <literal>build
</literal> to generate a script that recreates the schema for the current
mappings, even if the schema already exists.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-sqlEncode/-se &lt;encoding&gt;</literal>: Use this option
with <literal>-sqlFile</literal> to write the SQL script in a different
Java character set encoding than the default JVM locale, such as
<literal>-sqlTerminator/-st &lt;terminal&gt;</literal>: Use this option
with <literal>-sqlFile</literal> to write the SQL terminating with a
different character instead of a semicolon.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-dropTables/-dt &lt;true/t | false/f&gt;</literal>: Corresponds to the
same-named option on the schema tool.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-rollbackBeforeDDL/-rbddl &lt;true/t | false/f&gt;</literal>: Corresponds to the
same-named option on the schema tool.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-dropSequences/-dsq &lt;true/t | false/f&gt;</literal>: Corresponds to
the same-named option on the schema tool.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-openjpaTables/-ot &lt;true/t | false/f&gt;</literal>: Corresponds to
the same-named option on the schema tool.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-ignoreErrors/-i &lt;true/t | false/f&gt;</literal>: Corresponds to
the same-named option on the schema tool.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-schemas/-s &lt;schema and table names&gt;</literal>: Corresponds to
the same-named option on the schema tool. This option is ignored if <literal>
readSchema</literal> is not set to <literal>true</literal>.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-readSchema/-rs &lt;true/t | false/f&gt;</literal>: Set this option to
<literal>true</literal> to read the entire existing schema when the tool runs.
Reading the existing schema ensures that OpenJPA does not generate any mappings
that use table, index, primary key, or foreign key names that conflict with
existing names. Depending on the JDBC driver, though, it can be a slow process
for large schemas.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-primaryKeys/-pk &lt;true/t | false/f&gt;</literal>: Whether to read
and manipulate primary key information of existing tables. Defaults to false.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-foreignKeys/-fk &lt;true/t | false/f&gt;</literal>: Whether to read
and manipulate foreign key information of existing tables. Defaults to false.
This means that to add any new foreign keys to a class that has already been
mapped, you must explicitly set this flag to true.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-indexes/-ix &lt;true/t | false/f&gt;</literal>: Whether to read and
manipulate index information of existing tables. Defaults to false. This means
that to add any new indexes to a class that has already been mapped once, you
must explicitly set this flag to true.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-sequences/-sq &lt;true/t | false/f&gt;</literal>: Whether to
manipulate sequences. Defaults to true.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>-meta/-m &lt;true/t | false/f&gt;</literal>: Whether the given action
applies to metadata rather than or in addition to mappings.
                </para>
            </listitem>
        </itemizedlist>
        <para>
The mapping tool also uses an <literal>-action/-a</literal> argument to specify
the action to take on each class. The available actions are:
        </para>
        <itemizedlist>
            <listitem>
                <para>
<literal>buildSchema</literal>: This is the default action. It
makes the database schema match your existing mappings. If your provided
mappings conflict with your class definitions, OpenJPA will fail with an
informative exception.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>validate</literal>: Ensure that the mappings for the given classes are
valid and that they match the schema. No mappings or tables will be changed. An
exception is thrown if any mappings are invalid.
                </para>
            </listitem>
        </itemizedlist>
        <para>
Each additional argument to the tool should be one of:
        </para>
        <itemizedlist>
            <listitem>
                <para>
The full name of a persistent class.
                </para>
            </listitem>
            <listitem>
                <para>
The .java file for a persistent class.
                </para>
            </listitem>
            <listitem>
                <para>
The <filename>.class</filename> file of a persistent class.
                </para>
            </listitem>
        </itemizedlist>
        <para>
If you do not supply any arguments to the mapping tool, it will run on the
classes in your persistent classes list (see
<xref linkend="ref_guide_pc_pcclasses"/>).
        </para>
        <para>
The mappings generated by the mapping tool are stored by the system <emphasis>
mapping factory</emphasis>. <xref linkend="ref_guide_mapping_factory"/>
discusses your mapping factory options.
        </para>
        <section id="ref_guide_mapping_mappingtool_examples">
            <title>
                Using the Mapping Tool
            </title>
            <indexterm zone="ref_guide_mapping_mappingtool_examples">
                <primary>
                    mapping tool
                </primary>
                <secondary>
                    use cases
                </secondary>
            </indexterm>
            <para>
The JPA specification defines a comprehensive set of defaults for missing
mapping information. Thus, forward mapping in JPA is virtually automatic. After
using the mapping annotations covered in <xref linkend="jpa_overview_mapping"/>
of the JPA Overview to override any unsatisfactory defaults, run the
mapping tool on your persistent classes.  The default <literal>buildSchema
</literal> mapping tool action manipulates the database schema to
match your mappings. It fails if any of your mappings don't match your object
model.
            </para>
            <example id="ref_guide_mapping_mappingtool_buildschema">
                <title>
                    Creating the Relational Schema from Mappings
                </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool Magazine.java
</programlisting>
            </example>
            <para>
To drop the schema for a persistent class, set the mapping tool's <literal>
schemaAction</literal> to <literal>drop</literal>.
            </para>
            <example id="ref_guide_mapping_mappingtool_cleanup_tables">
                <title>
                    Refreshing entire schema and cleaning out tables
                </title>
	            <indexterm zone="ref_guide_mapping_mappingtool_cleanup_tables">
    	            <primary>
        	            testing
            	    </primary>
                	<secondary>
                    	Rebuild mappings and clean tables
	                </secondary>
    	        </indexterm>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -schemaAction add,deleteTableContents
</programlisting>
            </example>
            <example id="ref_guide_mapping_mappingtool_dropschema">
                <title>
                    Dropping Mappings and Association Schema
                </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -schemaAction drop Magazine.java
</programlisting>
            </example>
        </section>
        <section id="ref_guide_ddl_examples">
            <title>
                Generating DDL SQL
            </title>
            <indexterm zone="ref_guide_ddl_examples">
                <primary>
                    mapping tool
                </primary>
                <secondary>
                    DDL generation
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_ddl_examples">
                <primary>
                    DDL
                </primary>
                <secondary>
                    with mapping tool
                </secondary>
            </indexterm>
            <para>
The examples below show how to use the mapping tool to generate DDL SQL scripts,
rather than modifying the database directly.
            </para>
            <example id="ref_guid_mapping_ddl_full_ddl">
                <title>
                    Create DDL for Current Mappings
                </title>
                <para>
This example uses your existing mappings to determine the needed schema, then
writes the SQL to create that schema to <filename>create.sql</filename>.
                </para>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -schemaAction build -sql create.sql Magazine.java
</programlisting>
            </example>
            <example id="ref_guid_mapping_ddl_part_ddl">
                <title>
                    Create DDL to Update Database for Current Mappings
                </title>
                <para>
This example uses your existing mappings to determine the needed schema. It then
writes the SQL to add any missing tables and columns to the current schema to
<filename>update.sql</filename>.
                </para>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -sql update.sql Magazine.java
</programlisting>
            </example>
        </section>
        <section id="ref_guide_mapping_synch">
            <title>
                Runtime Forward Mapping
            </title>
            <indexterm zone="ref_guide_mapping_synch">
                <primary>
                    forward mapping
                </primary>
                <secondary>
                    automatic runtime mapping
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_mapping_synch">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    automatic runtime mapping
                </secondary>
            </indexterm>
            <para>
You can configure OpenJPA to automatically run the mapping tool at runtime
through the <link linkend="openjpa.jdbc.SynchronizeMappings"><literal>
openjpa.jdbc.SynchronizeMappings</literal></link> configuration property. Using
this property saves you the trouble of running the mapping tool manually, and is
meant for use during rapid test/debug cycles.
            </para>
            <para>
In order to enable automatic runtime mapping, you must first list all your
persistent classes as described in <xref linkend="ref_guide_pc_pcclasses"/>.
            </para>
            <para>
OpenJPA will run the mapping tool on these classes when your application obtains
its first <classname>EntityManager</classname>.
            </para>
            <para>
The <literal>openjpa.jdbc.SynchronizeMappings</literal> property is a plugin
string (see <xref linkend="ref_guide_conf_plugins"/>) where the class
name is the mapping tool action to invoke, and the properties are the
<classname>MappingTool</classname> class' JavaBean properties. These properties
correspond go the long versions of the tool's command line flags.
            </para>
            <example id="ref_guide_mapping_synchex">
                <title>
                    Configuring Runtime Forward Mapping
                </title>
<programlisting>
&lt;property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/&gt;
</programlisting>
                <para>
The setting above corresponds to running the following command:
                </para>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -action buildSchema -foreignKeys true
</programlisting>
            </example>
        </section>
    </section>
    <section id="ref_guide_pc_reverse">
        <title>
            Reverse Mapping
        </title>
        <indexterm zone="ref_guide_pc_reverse">
            <primary>
                reverse mapping
            </primary>
        </indexterm>
        <indexterm zone="ref_guide_pc_reverse">
            <primary>
                reverse mapping tool
            </primary>
            <seealso>
                reverse mapping
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                mapping metadata
            </primary>
            <secondary>
                reverse mapping
            </secondary>
            <see>
                reverse mapping
            </see>
        </indexterm>
        <para>
OpenJPA includes a <emphasis>reverse mapping</emphasis> tool for generating
persistent class definitions, complete with metadata, from an existing database
schema. You do not have to use the reverse mapping tool to access an existing
schema; you are free to write your classes and mappings yourself, as described
in <xref linkend="ref_guide_mapping_middle"/>. The reverse mapping tool,
however, can give you an excellent starting point from which to grow your
persistent classes.
        </para>
        <para>
To use the reverse mapping tool, follow the steps below:
        </para>
        <orderedlist>
            <listitem>
                <para>
Use the <link linkend="ref_guide_schema_schematool"> schema tool</link> to
export your current schema to an XML schema file. You can skip this step and the
next step if you want to run the reverse mapping tool directly against the
database.
                </para>
                <example id="ref_guide_pc_reverse_schemagen">
                    <title>
                        Reflection with the Schema Tool
                    </title>
<programlisting>
java org.apache.openjpa.jdbc.schema.SchemaTool -a reflect -f schema.xml
</programlisting>
                </example>
            </listitem>
            <listitem>
                <para>
Examine the generated schema file. JDBC drivers often provide incomplete or
faulty metadata, in which case the file will not exactly match the actual
schema. Alter the XML file to match the true schema. The XML format for the
schema file is described in <xref linkend="ref_guide_schema_xml"/>.
                </para>
                <para>
After fixing any errors in the schema file, modify the XML to include foreign
keys between all relations. The schema tool will have automatically detected
existing foreign key constraints; many schemas, however, do not employ database
foreign keys for every relation. By manually adding any missing foreign keys,
you will give the reverse mapping tool the information it needs to generate the
proper relations between the persistent classes it creates.
                </para>
            </listitem>
            <listitem>
                <para>
Run the reverse mapping tool on the finished schema file. If you do not supply
the schema file to reverse map, the tool will run directly against the schema in
the database. The tool can be run via its Java class,
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/ReverseMappingTool">
<classname>org.apache.openjpa.jdbc.meta.ReverseMappingTool</classname></ulink>.
                </para>
                <example id="ref_guide_pc_reverse_reversemappingtool">
                    <title>
                        Using the Reverse Mapping Tool
                    </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.ReverseMappingTool -pkg com.xyz -d ~/src -cp customizer.properties schema.xml
</programlisting>
                </example>
                <para>
In addition to OpenJPA's <link linkend="ref_guide_conf_devtools">standard
configuration flags</link>, including
<link linkend="ref_guide_conf_devtools_format">code formatting options</link>,
the reverse mapping tool recognizes the following command line arguments:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>-schemas/-s &lt;schema and table names&gt;</literal>: A
comma-separated list of schema and table names to reverse map, if no XML schema
file is supplied. Each element of the list must follow the naming conventions
for the <literal>openjpa.jdbc.Schemas</literal> property described in
<xref linkend="ref_guide_schema_info_list"/>. In fact, if this flag is
omitted, it defaults to the value of the <literal>Schemas</literal> property. If
the <literal>Schemas</literal> property is not defined, all schemas will be
reverse-mapped.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-package/-pkg &lt;package name&gt;</literal>: The package name of the
generated classes. If no package name is given, the generated code will not
contain package declarations.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-directory/-d &lt;output directory&gt;</literal>: All generated code
and metadata will be written to the directory at this path. If the path does not
match the package of a class, the package structure will be created beneath this
directory. Defaults to the current directory.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-metadata/-md &lt;class | package | none&gt;</literal>: Specify the
level the metadata should be generated at. Defaults to generating a single
package-level metadata file. Set to <literal>none</literal> to disable orm.xml
generation.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-annotations/-ann &lt;true/t | false/f&gt;</literal>: Set to
<literal>true</literal> to
generate JPA annotations in generated Java classes.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-accessType/-access &lt;field | property&gt;</literal>: Change access
type for generated annotations. Defaults to field access.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useSchemaName/-sn &lt;true/t | false/f&gt;</literal>: Set this flag
to <literal>true</literal> to include the schema as well as table name in the
name of each generated class. This can be useful when dealing with multiple
schemas with same-named tables.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useSchemaElement/-se &lt;true/t | false/f&gt;</literal>: Set this
flag to <literal>false</literal> to exclude the schema name from the
<literal>@Table</literal> annotation in the generated class for each table.
If set to <literal>false</literal>, the schema name will also be removed from
the corresponding XML mapping files (orm.xml) that are generated by the tool.
The initialized value is true (in order to preserve backwards compatibility).
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useForeignKeyName/-fkn &lt;true/t | false/f&gt;</literal>: Set this
flag to <literal>true</literal> if you would like field names for relations to
be based on the database foreign key name. By default, relation field names are
derived from the name of the related class.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-nullableAsObject/-no &lt;true/t | false/f&gt;</literal>: By default,
all non-foreign key columns are mapped to primitives. Set this flag to <literal>
true</literal> to generate primitive wrapper fields instead for columns that
allow null values.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-blobAsObject/-bo &lt;true/t | false/f&gt;</literal>: By default, all
binary columns are mapped to <classname>byte[]</classname> fields. Set this flag
to <literal>true</literal> to map them to <classname>Object</classname> fields
instead. Note that when mapped this way, the column is presumed to contain a
serialized Java object.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-primaryKeyOnJoin/-pkj &lt;true/t | false/f&gt;</literal>: The
standard reverse mapping tool behavior is to map all tables with primary keys to
persistent classes. If your schema has primary keys on many-many join tables as
well, set this flag to <literal>true</literal> to avoid creating classes for
those tables.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-inverseRelations/-ir &lt;true/t | false/f&gt;</literal>: Set to
<literal>false</literal> to prevent the creation of inverse 1-many/1-1 relations
for every many-1/1-1 relation detected.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useGenericCollections/-gc &lt;true/t | false/f&gt;</literal>: Set to
true to use generic collections on OneToMany and ManyToMany relations.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useDatastoreIdentity/-ds &lt;true/t | false/f&gt;</literal>: Set to
<literal>true</literal> to use datastore identity for tables that have single
numeric primary key columns. The tool typically uses application identity for
all generated classes.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-useBuiltinIdentityClass/-bic &lt;true/t | false/f&gt;</literal>: Set
to <literal>false</literal> to prevent the tool from using built-in application
identity classes when possible. This will force the tool to create custom
application identity classes even when there is only one primary key column.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-innerIdentityClasses/-inn &lt;true/t | false/f&gt;</literal>: Set to
<literal>true</literal> to have any generated application identity classes be
created as static inner classes within the persistent classes. Defaults to
<literal>false</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-identityClassSuffix/-is &lt;suffix&gt;</literal>: Suffix to append to
class names to form application identity class names, or for inner identity
classes, the inner class name. Defaults to <literal>Id</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-typeMap/-typ &lt;type mapping&gt;</literal>: A string that specifies
the default Java classes to generate for each SQL type that is seen in the
schema. The format is <literal> SQLTYPE1=JavaClass1,SQLTYPE2=JavaClass2
</literal>. The SQL type name first looks for a customization based on <literal>
SQLTYPE(SIZE,PRECISION)</literal>, then <literal>SQLTYPE(SIZE)</literal>, then
<literal>SQLTYPE</literal>. So if a column whose type name is
<literal>CHAR</literal> is found, it will first look for the <literal>
CHAR(50,0)</literal> type name specification, then it will look for <literal>
CHAR(50)</literal>, and finally it will just look for <literal>CHAR</literal>.
For example, to generate a char array for every <literal>CHAR</literal> column
whose size is exactly 50, and to generate a <literal>short</literal> for every
type name of <literal>INTEGER</literal>, you might specify: <literal>
CHAR(50)=char[],INTEGER=short</literal>. Note that since various databases
report different type names differently, one database's type name specification
might not work for another database. Enable <literal>TRACE</literal> level
logging on the <literal>MetaData</literal> channel to track which type names
OpenJPA is examining.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-customizerClass/-cc &lt;class name&gt;</literal>: The full class name
of a
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/ReverseCustomizer.html">
<classname>org.apache.openjpa.jdbc.meta.ReverseCustomizer</classname></ulink>
customization plugin. If you do not specify a reverse customizer of your own,
the system defaults to a
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html">
<classname>PropertiesReverseCustomizer</classname></ulink>. This customizer
allows you to specify simple customization options in the properties file given
with the <literal>-customizerProperties</literal> flag below. We present the
available property keys <link linkend="ref_guide_pc_reverse_custom">
below</link>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-customizerProperties/-cp &lt;properties file or resource&gt;</literal>
: The path or resource name of a properties file to pass to the reverse
customizer on initialization.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>-customizer./-c.&lt;property name&gt; &lt;property value&gt;</literal>
: The given property name will be matched with the corresponding Java bean
property in the specified reverse customizer, and set to the given value.
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
Running the tool will generate <filename>.java</filename> files for each
generated class (and its application identity class, if applicable), along with
JPA annotations (if enabled by setting <literal>-annotations true</literal>),
or an <filename>orm.xml</filename> file (if not disabled with <literal>
-metadata none</literal>) containing the corresponding persistence metadata.
                </para>
            </listitem>
            <listitem>
                <para>
Examine the generated class, metadata, and mapping information, and modify it as
necessary. Remember that the reverse mapping tool only provides a starting
point, and you are free to make whatever modifications you like to the code it
generates.
                </para>
                <para>
After you are satisfied with the generated classes and their mappings, you
should first compile the classes with <literal>javac</literal>, <literal>
jikes</literal>, or your favorite Java compiler. Make sure the classes are
located in the directory corresponding to the <literal>-package</literal> flag
you gave the reverse mapping tool.  Next, if you have generated an <filename>
orm.xml</filename>, move that file to a <filename>META-INF</filename> directory
within a directory in your classpath.  Finally, enhance the classes
if necessary (see <xref linkend="ref_guide_pc_enhance"/>).
                </para>
            </listitem>
        </orderedlist>
        <para>
Your persistent classes are now ready to access your existing schema.
        </para>
        <section id="ref_guide_pc_reverse_custom">
            <title>
                Customizing Reverse Mapping
            </title>
            <para>
The <classname>org.apache.openjpa.jdbc.meta.ReverseCustomizer</classname> plugin
interface allows you to customize the reverse mapping process. See the class
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/ReverseCustomizer.html">
Javadoc</ulink> for details on the hooks that this interface provides. Specify
the concrete plugin implementation to use with the <literal>
-customizerClass/-cc</literal> command-line flag, described in the preceding
section.
            </para>
            <para>
By default, the reverse mapping tool uses a
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/PropertiesReverseCustomizer.html">
<classname>org.apache.openjpa.jdbc.meta.PropertiesReverseCustomizer</classname>
</ulink>. This customizer allows you to perform relatively simple
customizations through the properties file named with the <literal>
-customizerProperties</literal> tool flag. The customizer recognizes the
following properties:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>&lt;table name&gt;.table-type &lt;type&gt;</literal>: Override the
default type of the table with name <literal>&lt;table name&gt;</literal>.
Legal values are:
                    </para>
                    <itemizedlist>
                        <listitem>
                            <para>
<literal>base</literal>: Primary table for a base class.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>secondary</literal>: Secondary table for a class. The table must have
a foreign key joining to a class table.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>secondary-outer</literal>: Outer-joined secondary table for a class.
The table must have a foreign key joining to a class table.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>association</literal>: Association table. The table must have two
foreign keys to class tables.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>collection</literal>: Collection table. The table must have one
foreign key to a class table and one data column.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>subclass</literal>: A joined subclass table. The table must have a
foreign key to the superclass' table.
                            </para>
                        </listitem>
                        <listitem>
                            <para>
<literal>none</literal>: The table should not be reverse-mapped.
                            </para>
                        </listitem>
                    </itemizedlist>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;class name&gt;.rename &lt;new class name&gt;</literal>: Override
the given tool-generated name <literal>&lt;class name&gt;</literal> with a new
value. Use full class names, including package. You are free to rename a class
to a new package. Specify a value of <literal>none</literal> to reject the class
and leave the corresponding table unmapped.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;table name&gt;.class-name &lt;new class name&gt;</literal>: Assign
the given fully-qualified class name to the type created from the table with
name <literal>&lt;table name&gt;</literal>. Use a value of <literal>none
</literal> to prevent reverse mapping this table. This property can be used in
place of the <literal>rename</literal> property.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;class name&gt;.identity &lt;datastore | builtin | identity class
name&gt;</literal>: Set this property to <literal>datastore</literal> to use
datastore identity for the class <literal>&lt;class name&gt;</literal>,
<literal>builtin</literal> to use a built-in identity class, or the desired
application identity class name. Give full class names, including package. You
are free to change the package of the identity class this way. If the persistent
class has been renamed, use the new class name for this property key. Remember
that datastore identity requires a table with a single numeric primary key
column, and built-in identity requires a single primary key column of any type.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;class name&gt;.&lt;field name&gt;.rename &lt;new field name&gt;
</literal>: Override the tool-generated <literal>&lt;field name&gt;</literal> in
class <literal>&lt;class name&gt;</literal> with the given name. Use the field
owner's full class name in the property key. If the field owner's class was
renamed, use the new class name. The property value should be the new field
name, without the preceding class name. Use a value of <literal>none</literal>
to reject the generated mapping and remove the field from the class.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;table name&gt;.&lt;column name&gt;.field-name &lt;new field
name&gt;</literal>: Set the generated field name for the <literal>&lt;table
name&gt;</literal> table's <literal>&lt;column name&gt;</literal> column. If
this is a multi-column mapping, any of the columns can be used. Use a value of
<literal>none</literal> to prevent the column and its associated columns from
being reverse-mapped.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;class name&gt;.&lt;field name&gt;.type &lt;field type&gt;</literal>
: The type to give the named field. Use full class names. If the field or the
field's owner class has been renamed, use the new name.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>&lt;class name&gt;.&lt;field name&gt;.value</literal>: The initial
value for the named field. The given string will be placed as-is in the
generated Java code, so be sure it is valid Java. If the field or the field's
owner class has been renamed, use the new name.
                    </para>
                </listitem>
            </itemizedlist>
            <para>
All property keys are optional; if not specified, the customizer keeps the
default value generated by the reverse mapping tool.
            </para>
            <example id="ref_guide_pc_reverse_custom_ex">
                <title>
                    Customizing Reverse Mapping with Properties
                </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.ReverseMappingTool -pkg com.xyz -cp custom.properties schema.xml
</programlisting>
                <para>
Example <filename>custom.properties</filename>:
                </para>
<programlisting>
com.xyz.TblMagazine.rename:             com.xyz.Magazine
com.xyz.TblArticle.rename:              com.xyz.Article
com.xyz.TblPubCompany.rename:           com.xyz.pub.Company
com.xyz.TblSysInfo.rename:              none

com.xyz.Magazine.allArticles.rename:    articles
com.xyz.Magazine.articles.type:         java.util.Collection
com.xyz.Magazine.articles.value:        new TreeSet()
com.xyz.Magazine.identity:              datastore

com.xyz.pub.Company.identity:           com.xyz.pub.CompanyId
</programlisting>
            </example>
        </section>
    </section>
    <section id="ref_guide_mapping_middle">
        <title>
            Meet-in-the-Middle Mapping
        </title>
        <indexterm zone="ref_guide_pc_reverse">
            <primary>
                meet-in-the-middle mapping
            </primary>
        </indexterm>
        <indexterm zone="ref_guide_pc_reverse">
            <primary>
                reverse mapping tool
            </primary>
            <seealso>
                reverse mapping
            </seealso>
        </indexterm>
        <indexterm>
            <primary>
                mapping metadata
            </primary>
            <secondary>
                meet-in-the-middle mapping
            </secondary>
            <see>
                meet-in-the-middle mapping
            </see>
        </indexterm>
        <para>
In the <emphasis>meet-in-the-middle</emphasis>
mapping approach, you control both the relational model and the object model. It
is up to you to define the mappings between these models.  The mapping
tool's <literal>validate</literal> action is useful to meet-in-the-middle
mappers. This action verifies that the mapping information for a class matches
the class definition and the existing schema. It throws an informative exception
when your mappings are incorrect.
        </para>
        <example id="ref_guide_mapping_mappingtool_validate">
            <title>
                Validating Mappings
            </title>
<programlisting>
java org.apache.openjpa.jdbc.meta.MappingTool -action validate Magazine.java
</programlisting>
        </example>
        <para>
The <literal>buildSchema</literal> action we discussed in
<xref linkend="ref_guide_mapping_mappingtool"/> is also somewhat useful
during meet-in-the-middle mapping. Unlike the <literal>validate</literal>
action, which throws an exception if your mapping data does not match the
existing schema, the <literal>buildSchema</literal> action assumes your mapping
data is correct, and modifies the schema to match your mappings. This lets you
modify your mapping data manually, but saves you the hassle of using your
database's tools to bring the schema up-to-date.
        </para>
    </section>
    <section id="ref_guide_mapping_defaults">
        <title>
            Mapping Defaults
        </title>
        <indexterm zone="ref_guide_mapping_defaults">
            <primary>
                MappingDefaults
            </primary>
        </indexterm>
        <indexterm zone="ref_guide_mapping_defaults">
            <primary>
                mapping metadata
            </primary>
            <secondary>
                defaults
            </secondary>
            <see>
                MappingDefaults
            </see>
        </indexterm>
        <para>
The previous sections showed how to use the mapping tool to generate default
mappings. But how does the mapping tool know what mappings to generate? The
answer lies in the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/MappingDefaults.html">
<classname>org.apache.openjpa.jdbc.meta.MappingDefaults</classname></ulink>
interface. OpenJPA uses an instance of this interface to decide how to name
tables and columns, where to put foreign keys, and generally how to create a
schema that matches your object model.
        </para>
        <important>
            <para>
OpenJPA relies on foreign key constraint information at runtime to order SQL
appropriately. Be sure to set your mapping defaults to reflect your existing
database constraints, set the schema factory to reflect on the database for
constraint information (see <xref linkend="ref_guide_schema_info_factory"/>),
or use explicit foreign key mappings as described in
<xref linkend="ref_guide_mapping_jpa_fk"/>.
            </para>
        </important>
        <para>
The <link linkend="openjpa.jdbc.MappingDefaults"><literal>
openjpa.jdbc.MappingDefaults</literal></link> configuration property controls
the <classname>MappingDefaults</classname> interface implementation in use. This
is a plugin property (see <xref linkend="ref_guide_conf_plugins"/>), so
you can substitute your own implementation or configure the existing ones.
OpenJPA includes the following standard implementations:
        </para>
        <itemizedlist>
            <listitem>
                <para>
<literal>jpa</literal>: Provides defaults in compliance with the JPA standard.
This is an alias for the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/PersistenceMappingDefaults.html">
<classname>org.apache.openjpa.persistence.jdbc.PersistenceMappingDefaults
</classname></ulink> class. This class extends the <classname>
MappingDefaultsImpl</classname> class described below, so it has all the same
properties (though with different default values), as well as:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>PrependFieldNameToJoinTableInverseJoinColumns</literal>: Whether to
prepend the owning field name to the names of inverse join columns in join
tables.  Defaults to true per the JPA specification.  Set to false for
compatibility with older OpenJPA versions which did not prepend the field name.
                        </para>
                    </listitem>
                </itemizedlist>
            </listitem>
            <listitem>
                <para>
<literal>default</literal>: This is an alias for the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.html">
<classname>org.apache.openjpa.jdbc.meta.MappingDefaultsImpl</classname></ulink>
class. This default implementation is highly configurable. It has the following
properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>DefaultMissingInfo</literal>: Whether to default missing column and
table names rather than throw an exception. If set to false, full explicit
mappings are required at runtime and when using mapping tool actions like
<literal>buildSchema</literal> and <literal>validate</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<indexterm><primary>Hungarian notation</primary></indexterm>
<literal>RemoveHungarianNotation</literal>: Switches on/off removal of
Hungarian notation when generating column names.
Fields such as <literal>mFoobar</literal> and <literal>strBarFoo</literal>
would become columns named <literal>foobar</literal> and
<literal>barfoo</literal> respectively. OpenJPA will search for the first
instance of a uppercase character in the field name and then truncate the
column name to remove anything before it.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>BaseClassStrategy</literal>: The default mapping strategy for base
classes. You can specify a built-in strategy alias or the full class name of a
<link linkend="ref_guide_mapping_custom_class">custom class strategy</link>.
You can also use OpenJPA's plugin format (see
<xref linkend="ref_guide_conf_plugins"/>) to pass arguments to the
strategy instance. See the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/strats/package-summary.html">
<literal>org.apache.openjpa.jdbc.meta.strats</literal></ulink> package for
available strategies.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>SubclassStrategy</literal>: The default mapping strategy for
subclasses. You can specify a builtin strategy alias or the full class name of a
<link linkend="ref_guide_mapping_custom_class"> custom class strategy</link>.
You can also use OpenJPA's plugin format (see
<xref linkend="ref_guide_conf_plugins"/>) to pass arguments to the
strategy instance. Common strategies are <literal>vertical</literal> and
<literal>flat</literal>, the default. See the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/strats/package-summary.html">
<literal>org.apache.openjpa.jdbc.meta.strats</literal></ulink> package for all
available strategies.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>VersionStrategy</literal>: The default version strategy for classes
without a version field. You can specify a builtin strategy alias or the full
class name of a <link linkend="ref_guide_mapping_custom_versdiscrim"> custom
version strategy</link>. You can also use OpenJPA's plugin format (see
<xref linkend="ref_guide_conf_plugins"/>) to pass arguments to the
strategy instance. Common strategies are <literal>none</literal>, <literal>
state-comparison</literal>, <literal> timestamp</literal>, and <literal>
version-number</literal>, the default. See the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/strats/package-summary.html">
<literal>org.apache.openjpa.jdbc.meta.strats</literal></ulink> package for all
available strategies.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>DiscriminatorStrategy</literal>: The default discriminator strategy
when no discriminator value is given. You can specify a builtin strategy alias
or the full class name of a
<link linkend="ref_guide_mapping_custom_versdiscrim"> custom discriminator
strategy</link>. You can also use OpenJPA's plugin format (see
<xref linkend="ref_guide_conf_plugins"/>) to pass arguments to the
strategy instance. Common strategies are <literal>final</literal> for a base
class without subclasses, <literal>none</literal> to use joins to subclass
tables rather than a discriminator column, and <literal> class-name</literal>,
the default. See the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/strats/package-summary.html">
<literal>org.apache.openjpa.jdbc.meta.strats</literal></ulink> package for all
available strategies.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>FieldStrategies</literal>: This property associates field types with
custom strategies. The format of this property is similar to that of plugin
strings (see <xref linkend="ref_guide_conf_plugins"/> ), without the class
name. It is a comma-separated list of key/value pairs, where each key is a
possible field type, and each value is itself a plugin string describing the
strategy for that type. We present an example below. See
<xref linkend="ref_guide_mapping_custom_field"/> for information on custom
field strategies.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>ForeignKeyDeleteAction</literal>: The default delete action of foreign
keys representing relations to other objects. Recognized values include
<literal>restrict</literal>, <literal>cascade</literal>, <literal>null</literal>
, <literal>default</literal>. These values correspond exactly to the standard
database foreign key actions of the same names.
                        </para>
                        <para>
The value <literal>none</literal> tells OpenJPA not to create database foreign
keys on relation columns. This is the default.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>JoinForeignKeyDeleteAction</literal>: The default delete action of
foreign keys that join secondary, collection, map, or subclass tables to
the primary table. Accepts the same values as the <literal>
ForeignKeyDeleteAction</literal> property above.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>DeferConstraints</literal>: Whether to use deferred database
constraints if possible. Defaults to false.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>IndexLogicalForeignKeys</literal>: Boolean property controlling
whether to create indexes on logical foreign keys. Logical foreign keys are
columns that represent a link between tables, but have been configured through
the <literal>ForeignKey</literal> properties above not to use a physical
database foreign key. Defaults to true.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>DataStoreIdColumnName</literal>: The default name of datastore
identity columns.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>DiscriminatorColumnName</literal>: The default name of discriminator
columns.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>IndexDiscriminator</literal>: Whether to index the discriminator
column. Defaults to true.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>VersionColumnName</literal>: The default name of version columns.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>IndexVersion</literal>: Whether to index the version column. Defaults
to false.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>AddNullIndicator</literal>: Whether to create a synthetic null
indicator column for embedded mappings. The null indicator column allows OpenJPA
to distinguish between a null embedded object and one with default values for
all persistent fields.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>NullIndicatorColumnName</literal>: The default name of synthetic null
indicator columns for embedded objects.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>OrderLists</literal>: Whether to create a database ordering column for
maintaining the order of persistent lists and arrays.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>OrderColumnName</literal>: The default name of collection and array
ordering columns.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>StoreEnumOrdinal</literal>: Set to true to store enum fields as
numeric ordinal values in the database. The default is to store the enum value
name as a string, which is more robust if the Java enum declaration might be
rearranged.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>StoreUnmappedObjectIdString</literal>: Set to true to store the
stringified identity of related objects when the declared related type is
unmapped. By default, OpenJPA stores the related object's primary key value(s).
However, this breaks down if different subclasses of the related type use
incompatible primary key structures. In that case, stringifying the identity
value is the better choice.
                        </para>
                    </listitem>
                </itemizedlist>
            </listitem>
        </itemizedlist>
        <para>
The example below turns on foreign key generation during schema creation and
associates the <classname>org.mag.data.InfoStruct</classname> field type with
the custom <classname>org.mag.mapping.InfoStructHandler</classname> value
handler.
        </para>
        <example id="ref_guide_mapping_defaults_conf">
            <title>
                Configuring Mapping Defaults
            </title>
<programlisting>
&lt;property name="openjpa.jdbc.MappingDefaults"
    value="ForeignKeyDeleteAction=restrict,
    FieldStrategies='org.mag.data.InfoStruct=org.mag.mapping.InfoStructHandler'"/&gt;
</programlisting>
        </example>
    </section>
    <section id="ref_guide_mapping_factory">
        <title>
            Mapping Factory
        </title>
        <indexterm zone="ref_guide_mapping_factory">
            <primary>
                MappingFactory
            </primary>
        </indexterm>
        <indexterm>
            <primary>
                mapping metadata
            </primary>
            <secondary>
                loading and storing
            </secondary>
            <see>
                MappingFactory
            </see>
        </indexterm>
        <para>
An important decision in the object-relational mapping process is how and where
to store the data necessary to map your persistent classes to the database
schema.
        </para>
        <para>
<xref linkend="ref_guide_meta_factory"/> introduced OpenJPA's <classname>
MetaDataFactory</classname> interface. OpenJPA uses this same interface to
abstract the storage and retrieval of mapping information. OpenJPA includes the
built-in mapping factories below, and you can create your own factory if you
have custom needs. You control which mapping factory OpenJPA uses with the
<link linkend="openjpa.jdbc.MappingFactory"><literal>
openjpa.jdbc.MappingFactory</literal></link> configuration property.
        </para>
        <para>
The bundled mapping factories are:
        </para>
        <itemizedlist>
            <listitem>
                <para>
<literal>-</literal>: Leaving the <literal> openjpa.jdbc.MappingFactory
</literal> property unset allows your metadata factory to take over mappings as
well.  If you are using the default <literal>jpa</literal> metadata factory,
OpenJPA will read mapping information from your annotations and
<filename>orm.xml</filename> when you leave the mapping factory unspecified.
                </para>
            </listitem>
        </itemizedlist>
        <example id="ref_guide_mapping_factory_jpa">
            <title>
                Standard JPA Configuration
            </title>
            <para>
In the standard JPA configuration, the mapping factory is left unset.
            </para>
<programlisting>
&lt;property name="openjpa.MetaDataFactory" value="jpa"/&gt;
</programlisting>
        </example>
    </section>
    <section id="ref_guide_mapping_notes_nonstdjoins">
        <title>
            Non-Standard Joins
        </title>
        <indexterm zone="ref_guide_mapping_notes_nonstdjoins">
            <primary>
                joins
            </primary>
            <secondary>
                non-standard
            </secondary>
        </indexterm>
        <para>
The JPA Overview's <xref linkend="jpa_overview_mapping"/> explains join
mapping. All of the examples in that document, however, use "standard" joins, in
that there is one foreign key column for each primary key column in the target
table. OpenJPA supports additional join patterns, including partial primary key
joins, non-primary key joins, and joins using constant values.
        </para>
        <para>
        <indexterm>
            <primary>
                joins
            </primary>
            <secondary>
                partial primary key
            </secondary>
        </indexterm>
In a partial primary key join, the source table only has foreign key columns for
a subset of the primary key columns in the target table. So long as this subset
of columns correctly identifies the proper row(s) in the referenced table,
OpenJPA will function properly. There is no special syntax for expressing a
partial primary key join - just do not include column definitions for missing
foreign key columns.
        </para>
        <para>
        <indexterm>
            <primary>
                joins
            </primary>
            <secondary>
                non-primary key
            </secondary>
        </indexterm>
In a non-primary key join, at least one of the target columns is not a primary
key. Once again, OpenJPA supports this join type with the same syntax as a
primary key join. There is one restriction, however: each non-primary key column
you are joining to must be controlled by a field mapping that implements the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/Joinable.html"><classname>
org.apache.openjpa.jdbc.meta.Joinable</classname></ulink> interface. All built
in basic mappings implement this interface, including basic fields of embedded
objects. OpenJPA will also respect any custom mappings that implement this
interface. See <xref linkend="ref_guide_mapping_custom"/> for an
examination of custom mappings.
        </para>
        <para>
        <indexterm>
            <primary>
                joins
            </primary>
            <secondary>
                constant
            </secondary>
        </indexterm>
Not all joins consist of only links between columns. In some cases you might
have a schema in which one of the join criteria is that a column in the source
or target table must have some constant value. OpenJPA calls joins involving
constant values <emphasis>constant joins</emphasis>.
        </para>
        <para>
To form a constant join in JPA mapping, first set the <literal>JoinColumn
</literal>'s <literal>name</literal> attribute to the name of the column. If the
column with the constant value is the target of the join, give its fully
qualified name in the form <literal>&lt;table name&gt;.&lt;column name&gt;
</literal>. Next, set the <literal>referencedColumnName</literal> attribute to
the constant value. If the constant value is a string, place it in single quotes
to differentiate it from a column name.
        </para>
        <mediaobject>
            <imageobject>
                <!-- PNG image data, 427 x 211 (see README) -->
                <imagedata fileref="img/joins-constant.png" width="285px"/>

            </imageobject>
        </mediaobject>
        <para>
Consider the tables above. First, we want to join row <literal>T1.R1</literal>
to row <literal>T2.R1</literal>. If we just join column <literal>T1.FK</literal>
to <literal>T2.PK1</literal>, we will wind up matching both <literal>T2.R1
</literal> and <literal> T2.R2</literal>. So in addition to joining <literal>
T1.FK</literal> to <literal>T2.PK1</literal>, we also have to specify that
<literal>T2.PK2</literal> has the value <literal>a</literal>. Here is how we'd
accomplish this in mapping metadata.
        </para>
<programlisting>
@Entity
@Table(name="T1")
public class ...  {

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="FK" referencedColumnName="PK1"),
        @JoinColumn(name="T2.PK2" referencedColumnName="'a'")
    });
    private ...;
}
</programlisting>
        <para>
Notice that we had to fully qualify the name of column <literal>PK2</literal>
because it is in the target table. Also notice that we put single quotes around
the constant value so that it won't be confused with a column name. You do not
need single quotes for numeric constants. For example, the syntax to join
<literal>T1.R2</literal> to <literal>T2.R4</literal> is:
        </para>
<programlisting>
@Entity
@Table(name="T1")
public class ...  {

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="FK" referencedColumnName="PK2"),
        @JoinColumn(name="T2.PK1" referencedColumnName="2")
    });
    private ...;
}
</programlisting>
        <para>
Finally, from the inverse direction, these joins would look like this:
        </para>
<programlisting>
@Entity
@Table(name="T2")
public class ...  {

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="T1.FK" referencedColumnName="PK1"),
        @JoinColumn(name="PK2" referencedColumnName="'a'")
    });
    private ...;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="T1.FK" referencedColumnName="PK2"),
        @JoinColumn(name="PK1" referencedColumnName="2")
    });
    private ...;
}
</programlisting>
    </section>
    <section id="ref_guide_mapping_jpa">
        <title>
            Additional JPA Mappings
        </title>
        <indexterm zone="ref_guide_mapping_jpa">
            <primary>
                mapping metadata
            </primary>
            <secondary>
                JPA additions
            </secondary>
        </indexterm>
        <para>
OpenJPA supports many persistence strategies beyond those of the JPA
specification. <xref linkend="ref_guide_meta_jpa"/> covered the logical
metadata for OpenJPA's additional persistence strategies. We now demonstrate how
to map entities using these strategies to the database.
        </para>
        <section id="ref_guide_mapping_jpa_datastoreid">
            <title>
                Datastore Identity Mapping
            </title>
            <indexterm zone="ref_guide_mapping_jpa_datastoreid">
                <primary>
                    datastore identity
                </primary>
                <secondary>
                    mapping
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_datastoreid">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    datastore identity
                </secondary>
                <seealso>
                    identity
                </seealso>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_datastoreid">
                <primary>
                    DataStoreIdColumn
                </primary>
                <seealso>
                    mapping metadata
                </seealso>
            </indexterm>
            <indexterm>
                <primary>
                    primary key
                </primary>
            </indexterm>
            <para>
<xref linkend="ref_guide_pc_oid"/> describes how to use datastore identity
in JPA. OpenJPA requires a single numeric primary key column to hold datastore
identity values. The
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/DataStoreIdColumn.html">
<classname>org.apache.openjpa.persistence.jdbc.DataStoreIdColumn</classname>
</ulink> annotation customizes the datastore identity column. This annotation
has the following properties:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>String name</literal>: Defaults to <literal>ID</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>int precision</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>String columnDefinition</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>boolean insertable</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>boolean updatable</literal>
                    </para>
                </listitem>
            </itemizedlist>
            <para>
All properties correspond exactly to the same-named properties on the standard
<classname>Column</classname> annotation, described in
<xref linkend="jpa_overview_mapping_column"/>.
            </para>
            <example id="ref_guide_mapping_jpa_datastoreidex">
                <title>
                    Datastore Identity Mapping
                </title>
<programlisting>
import org.apache.openjpa.persistence.*;
import org.apache.openjpa.persistence.jdbc.*;

@Entity
@Table(name="LOGS")
@DataStoreIdColumn(name="ENTRY")
public class LogEntry {

    @Lob
    private String content;

    ...
}
</programlisting>
            </example>
        </section>
        <section id="ref_guide_mapping_jpa_version">
            <title>
                Surrogate Version Mapping
            </title>
            <indexterm zone="ref_guide_mapping_jpa_datastoreid">
                <primary>
                    version
                </primary>
                <secondary>
                    mapping
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_version">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    version
                </secondary>
                <seealso>
                    version
                </seealso>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_version">
                <primary>
                    VersionColumn
                </primary>
                <seealso>
                    mapping metadata
                </seealso>
            </indexterm>
            <para>
OpenJPA supports version fields as defined by the JPA specification, but allows
you to use a surrogate version column in place of a version field if you like.
You map the surrogate version column with the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/VersionColumn.html">
<classname>org.apache.openjpa.persistence.jdbc.VersionColumn</classname></ulink>
annotation. You can also use the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/VersionColumns.html">
<classname>org.apache.openjpa.persistence.jdbc.VersionColumns</classname>
</ulink> annotation to declare an array of <classname>VersionColumn</classname>
values. Each <classname>VersionColumn</classname> has the following properties:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>String name</literal>: Defaults to <literal>VERSN</literal>.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>String table</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>int length</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>int precision</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>int scale</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>String columnDefinition</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>boolean nullable</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>boolean insertable</literal>
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>boolean updatable</literal>
                    </para>
                </listitem>
            </itemizedlist>
            <para>
All properties correspond exactly to the same-named properties on the standard
<classname>Column</classname> annotation, described in
<xref linkend="jpa_overview_mapping_column"/>.
            </para>
            <para>
By default, OpenJPA assumes that surrogate versioning uses a version number
strategy. You can choose a different strategy with the <classname>
VersionStrategy</classname> annotation described in
<xref linkend="version-strategy"/>.
            </para>
            <para>
If multiple columns are used for surrogate versioning, then each column,
by default, uses a version number. But column definition for each version
column can be set independently to other numeric types. The version values are
compared to detect optimistic concurrent modification. Such comparison must
determine whether a version value <literal>v1</literal> represents an earlier,
later or same with respect to another version value <literal>v2</literal>. While
result of such comparison is obvious for a single numeric column that
monotonically increases on each update, the same is not true when version value
is an array of numbers. By default, OpenJPA compares a version
<literal>v1</literal> as later than another version <literal>v2</literal>,
if any array element of <literal>v1</literal> is
later than the corresponding element of <literal>v2</literal>.
<literal>v1</literal> is equal to <literal>v2</literal> if every array element
is equal and <literal>v1</literal> is earlier to <literal>v1</literal> if some
elements of <literal>v1</literal> are earlier and rest are equal to corresponding
element of <literal>v2</literal>.
        </para>
        <para>
Multiple surrogate version columns can be spread across primary and secondary
tables. For example, following example shows 3 version columns
<literal>v01, v11, v12, v21</literal> defined across the primary and secondary tables of
a persistent entity
        </para>
        <programlisting>
@Entity
@Table(name="PRIMARY")
@SecondaryTables({
    @SecondaryTable(name = "SECONDARY_1"),
    @SecondaryTable(name = "SECONDARY_2")
})
@VersionStrategy("version-numbers")
@VersionColumns({
    @VersionColumn(name = "v01") // default is the PRIMARY table
    @VersionColumn(name = "v11", table="SECONDARY_1", columnDefinition="FLOAT", scale=3, precision=10),
    @VersionColumn(name = "v12", table="SECONDARY_1"),
    @VersionColumn(name = "v21", table="SECONDARY_2"),
})
</programlisting>

        </section>
        <section id="ref_guide_mapping_jpa_columns">
            <title>
                Multi-Column Mappings
            </title>
            <indexterm zone="ref_guide_mapping_jpa_columns">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    column
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_columns">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    multi-column mappings
                </secondary>
            </indexterm>
            <indexterm zone="ref_guide_mapping_jpa_columns">
                <primary>
                    Columns
                </primary>
                <seealso>
                    mapping metadata
                </seealso>
            </indexterm>
            <para>
OpenJPA makes it easy to create multi-column
<link linkend="ref_guide_mapping_custom_field">custom mappings</link>. The JPA
specification includes a <classname>Column</classname> annotation, but is
missing a way to declare multiple columns for a single field. OpenJPA remedies
this with the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Columns.html">
<classname>org.apache.openjpa.persistence.jdbc.Columns</classname></ulink>
annotation, which contains an array of <classname>Column</classname> values.
            </para>
            <para>
Remember to annotate custom field types with <classname>Persistent</classname>,
as described in <xref linkend="ref_guide_meta_jpa_persistent"/>.
            </para>
        </section>
        <section id="ref_guide_mapping_jpa_fieldjoin">
            <title>
                Join Column Attribute Targets
            </title>
            <para>
<xref linkend="jpa_overview_mapping_rel"/> in the JPA Overview introduced
you to the <classname>JoinColumn</classname> annotation. A <classname>
JoinColumn</classname>'s <literal> referencedColumnName</literal> property
declares which column in the table of the related type this join column links
to. Suppose, however, that the related type is unmapped, or that it is part of a
table-per-class inheritance hierarchy. Each subclass that might be assigned to
the field could reside in a different table, and could use entirely different
names for its primary key columns. It becomes impossible to supply a single
<literal>referencedColumnName</literal> that works for all subclasses.
            </para>
            <para>
OpenJPA rectifies this by allowing you to declare which <emphasis>attribute
</emphasis> in the related type each join column links to, rather than which
column. If the attribute is mapped differently in various subclass tables,
OpenJPA automatically forms the proper join for the subclass record at hand. The
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/XJoinColumn.html">
<classname>org.apache.openjpa.persistence.jdbc.XJoinColumn</classname></ulink>
annotation has all the same properties as the standard <classname>JoinColumn
</classname> annotation, but adds an additional <literal>
referencedAttributeName</literal> property for this purpose. Simply use a
<classname>XJoinColumn</classname> in place of a <classname>JoinColumn
</classname> whenever you need to access this added functionality.
            </para>
            <para>
For compound keys, use the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/XJoinColumns.html">
<classname>org.apache.openjpa.persistence.jdbc.XJoinColumns</classname></ulink>
annotation. The value of this annotation is an array of individual <classname>
XJoinColumn</classname>s.
            </para>
        </section>
        <section id="ref_guide_mapping_jpa_embed">
            <title>
                Embedded Mapping
            </title>
            <para>
JPA uses the <classname>AttributeOverride</classname> annotation to override the
default mappings of an embeddable class. The JPA Overview details this process
in <xref linkend="jpa_overview_mapping_embed"/>. <classname>
AttributeOverride</classname>s suffice for simple mappings, but do not allow
you to override complex mappings. Also, JPA has no way to differentiate between
a null embedded object and one with default values for all of its fields.
            </para>
            <para>
OpenJPA overcomes these shortcomings with the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/EmbeddedMapping.html">
<classname>org.apache.openjpa.persistence.jdbc.EmbeddedMapping</classname>
</ulink> annotation. This annotation has the following properties:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>String nullIndicatorColumnName</literal>: If the named column's value
is <literal>NULL</literal>, then the embedded object is assumed to be null. If
the named column has a non- <literal>NULL</literal> value, then the embedded
object will get loaded and populated with data from the other embedded fields.
This property is entirely optional. By default, OpenJPA always assumes the
embedded object is non-null, just as in standard JPA mapping.
                    </para>
                    <para>
If the column you name does not belong to any fields of the embedded object,
OpenJPA will create a synthetic null-indicator column with this name. In fact,
you can specify a value of <literal>true</literal> to simply indicate that you
want a synthetic null-indicator column, without having to come up with a name
for it. A value of <literal>false</literal> signals that you explicitly do not
want a null-indicator column created for this mapping (in case you have
configured your <link linkend="ref_guide_mapping_defaults">mapping defaults
</link> to create one by default).
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>String nullIndicatorFieldName</literal>: Rather than name a null
indicator column, you can name a field of the embedded type. OpenJPA will use
the column of this field as the null-indicator column.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>MappingOverride[] overrides</literal>: This array allows you to
override any mapping of the embedded object.
                    </para>
                </listitem>
            </itemizedlist>
            <para>
The <classname>EmbeddedMapping</classname>'s <literal>overrides</literal> array
serves the same purpose as standard JPA's <classname>AttributeOverride
</classname>s and <classname>AssociationOverride</classname> s. In fact, you can
also use the <classname>MappingOverride</classname> annotation on an entity
class to override a complex mapping of its mapped superclass, just as you can
with <classname> AttributeOverride</classname> and <classname>
AssociationOverride</classname> s. The <classname>MappingOverrides</classname>
annotation, whose value is an array of <classname>MappingOverride</classname> s,
allows you to override multiple mapped superclass mappings.
            </para>
            <para>
Each
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/MappingOverride.html">
<classname>org.apache.openjpa.persistence.jdbc.MappingOverride</classname>
</ulink> annotation has the following properties:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
<literal>String name</literal>: The name of the field that is being overridden.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>Column[] columns</literal>: Columns for the new field mapping.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>XJoinColumn[] joinColumns</literal>: Join columns for the new field
mapping, if it is a relation field.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>ContainerTable containerTable</literal>: Table for the new collection
or map field mapping. We cover collection mappings in
<xref linkend="ref_guide_mapping_jpa_coll"/>, and map mappings in
<xref linkend="ref_guide_mapping_jpa_map"/>.
                    </para>
                </listitem>
                <listitem>
                    <para>
<literal>ElementJoinColumn[] elementJoinColumns</literal>: Element join columns
for the new collection or map field mapping. You will see how to use element
join columns in <xref linkend="ref_guide_mapping_jpa_coll_joincols"/>.
                    </para>
                </listitem>
            </itemizedlist>
            <para>
The following example defines an embeddable <classname> PathCoordinate
</classname> class with a custom mapping of a <classname>java.awt.Point
</classname> field to two columns. It then defines an entity which embeds a
<classname> PointCoordinate</classname> and overrides the default mapping for
the point field. The entity also declares that if the <classname>PathCoordinate
</classname>'s <literal>siteName</literal> field column is null, it means that
no <classname>PathCoordinate</classname> is stored in the embedded record; the
owning field will load as null.
            </para>
            <example id="ref_guide_mapping_jpa_embedex">
                <title>
                    Overriding Complex Mappings
                </title>
<programlisting>
import org.apache.openjpa.persistence.jdbc.*;

@Embeddable
public class PathCoordinate {

    private String siteName;

    @Persistent
    @Strategy("com.xyz.openjpa.PointValueHandler")
    private Point point;

    ...
}

@Entity
public class Path {

    @Embedded
    @EmbeddedMapping(nullIndicatorFieldName="siteName", overrides={
        @MappingOverride(name="siteName", columns=@Column(name="START_SITE")),
        @MappingOverride(name="point", columns={
            @Column(name="START_X"),
            @Column(name="START_Y")
        })
    })
    private PathCoordinate start;

    ...
}
</programlisting>
            </example>
        </section>
        <section id="ref_guide_mapping_jpa_coll">
            <title>
                Collections
            </title>
            <indexterm zone="ref_guide_mapping_jpa_coll">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    collections
                </secondary>
            </indexterm>
            <para>
In <xref linkend="ref_guide_meta_jpa_persistent_coll"/>, we explored the
<classname>PersistentCollection</classname> annotation for persistent collection
fields that aren't a standard <literal>OneToMany</literal> or <literal>
ManyToMany</literal> relation. To map these non-standard collections, combine
OpenJPA's <classname>ContainerTable</classname> annotation with
<classname>ElementJoinColumn</classname>s.
We explore the annotations below.
            </para>
            <section id="ref_guide_mapping_jpa_coll_table">
                <title>
                    Container Table
                </title>
                <indexterm zone="ref_guide_mapping_jpa_coll_table">
                    <primary>
                        ContainerTable
                    </primary>
                    <seealso>
                        mapping metadata
                    </seealso>
                </indexterm>
                <para>
The
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ContainerTable.html">
<classname>org.apache.openjpa.persistence.jdbc.ContainerTable</classname>
</ulink> annotation describes a database table that holds collection (or map)
elements. This annotation has the following properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>String name</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String catalog</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String schema</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>XJoinColumn[] joinColumns</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>ForeignKey joinForeignKey</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>Index joinIndex</literal>
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
The <literal>name</literal>, <literal>catalog</literal>, <literal>schema
</literal>, and <literal>joinColumns</literal> properties describe the container
table and how it joins to the owning entity's table. These properties correspond
to the same-named properties on the standard <classname> JoinTable</classname>
annotation, described in <xref linkend="jpa_overview_mapping_assoccoll"/>
. If left unspecified, the name of the table defaults to the first five
characters of the entity table name, plus an underscore, plus the field name.
The <literal>joinForeignKey</literal> and <literal> joinIndex</literal>
properties override default foreign key and index generation for the join
columns. We explore foreign keys and indexes later in this chapter.
                </para>
                <para>
You may notice that the container table does not define how to store the
collection elements. That is left to separate annotations, which are the subject
of the next sections.
                </para>
            </section>
            <section id="ref_guide_mapping_jpa_coll_joincols">
                <title>
                    Element Join Columns
                </title>
                <indexterm zone="ref_guide_mapping_jpa_coll_joincols">
                    <primary>
                        ElementJoinColumn
                    </primary>
                    <seealso>
                        mapping metadata
                    </seealso>
                </indexterm>
                <para>
Element join columns are equivalent to standard JPA join columns, except that
they represent a join to a collection or map element entity rather than a direct
relation. You represent an element join column with OpenJPA's
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementJoinColumn.html">
<classname>org.apache.openjpa.persistence.jdbc.ElementJoinColumn</classname>
</ulink> annotation. To declare a compound join, enclose an array of <classname>
ElementJoinColumn</classname>s in the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementJoinColumns.html">
<classname>org.apache.openjpa.persistence.jdbc.ElementJoinColumns</classname>
</ulink> annotation.
                </para>
                <para>
An <classname>ElementJoinColumn</classname> always resides in a container table,
so it does not have the <literal> table</literal> property of a standard
<classname> JoinColumn</classname>. Like <classname> XJoinColumn</classname>s
above, <classname> ElementJoinColumn</classname>s can reference a linked
attribute rather than a static linked column. Otherwise, the <classname>
ElementJoinColumn</classname> and standard <classname>JoinColumn</classname>
annotations are equivalent. See <xref linkend="jpa_overview_mapping_rel"/>
in the JPA Overview for a review of the <classname>JoinColumn</classname>
annotation.
                </para>
            </section>
            <section id="ref_guide_mapping_jpa_coll_order">
                <title>
                    Order Column
                </title>
                <indexterm zone="ref_guide_mapping_jpa_coll_order">
                    <primary>
                        OrderColumn
                    </primary>
                    <seealso>
                        mapping metadata
                    </seealso>
                </indexterm>
                <para>
Relational databases do not guarantee that records are returned in insertion
order. If you want to make sure that your collection elements are loaded in the
same order they were in when last stored, you must declare an order column. An
order column can be declared using OpenJPA's
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/OrderColumn">
<classname>org.apache.openjpa.persistence.jdbc.OrderColumn</classname></ulink>
annotation or the JPA 2.0 <classname>javax.persistence.OrderColumn</classname>
annotation or <literal>order-column</literal> orm element as defined in
<xref linkend="jpa_overview_meta_xml"/>.
OpenJPA's
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/OrderColumn">
<classname>org.apache.openjpa.persistence.jdbc.OrderColumn</classname></ulink>
annotation has the following properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>String name</literal>: Defaults to <literal>the name of the
relationship property or field of the entity or embeddable
class + _ORDER</literal>.  To use the JPA 1.0 default order column
name <literal>ORDR</literal>, set the <xref linkend="openjpa.Compatibility"/>
option <literal>UseJPA2DefaultOrderColumnName</literal> to <literal>
false</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean enabled</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>int precision</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String columnDefinition</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean insertable</literal>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean updatable</literal>
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
Order columns are always in the container table. You can explicitly turn off
ordering (if you have enabled it by default via your
<link linkend="ref_guide_mapping_defaults"> mapping defaults</link>) by setting
the <literal>enabled</literal> property to <literal>false</literal>. All other
properties correspond exactly to the same-named properties on the standard
<classname>Column</classname> annotation, described in
<xref linkend="jpa_overview_mapping_column"/>.
                </para>
            </section>
        </section>
        <section id="ref_guide_mapping_jpa_onemany">
            <title>
                One-Sided One-Many Mapping
            </title>
            <indexterm zone="ref_guide_mapping_jpa_onemany">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    collections
                </secondary>
                <tertiary>
                    JPA one-sided one-many
                </tertiary>
            </indexterm>
            <para>
The previous section covered the use of <classname>ElementJoinColumn</classname>
annotations in conjunction with a <classname>ContainerTable</classname> for
mapping collections to dedicate tables. <classname>ElementJoinColumn</classname>
s, however, have one additional use: to create a one-sided one-many mapping.
Standard JPA supports <classname>OneToMany</classname> fields without a
<literal>mappedBy</literal> inverse, but only by mapping these fields to a
<classname>JoinTable</classname> (see
<xref linkend="jpa_overview_mapping_assoccoll"/> in the JPA Overview for
details). Often, you'd like to create a one-many association based on an inverse
foreign key (logical or actual) in the table of the related type.
            </para>
            <mediaobject>
                <imageobject>
                    <!-- PNG image data, 392 x 192 (see README) -->
                    <imagedata fileref="img/inv-key-coll.png" width="261"/>

                </imageobject>
            </mediaobject>
            <para>
Consider the model above. <classname>Subscription</classname> has a collection
of <classname>LineItem</classname> s, but <classname>LineItem</classname> has
no inverse relation to <classname>Subscription</classname>. To retrieve all of
the <classname>LineItem</classname> records for a <classname>Subscription
</classname>, we join the <literal>SUB_ID</literal> inverse foreign key column
in the <literal>LINE_ITEM</literal> table to the primary key column of the
<literal>SUB</literal> table. The example below shows how to represent this
model in mapping annotations. Note that OpenJPA automatically assumes an inverse
foreign key mapping when element join columns are given, but no container or
join table is given.
            </para>
            <example id="ref_guide_mapping_jpa_onemanyex">
                <title>
                    One-Sided One-Many Mapping
                </title>
<programlisting>
package org.mag.subscribe;

import org.apache.openjpa.persistence.jdbc.*;

@Entity
@Table(name="LINE_ITEM", schema="CNTRCT")
public class LineItem {
    ...
}

@Entity
@Table(name="SUB", schema="CNTRCT")
public class Subscription {

    @Id private long id;

    @OneToMany
    @ElementJoinColumn(name="SUB_ID", referencedColumnName="ID")
    private Collection&lt;LineItem&gt; items;

    ...
}
</programlisting>
            </example>
        </section>
        <section id="ref_guide_mapping_jpa_map">
            <title>
                Maps
            </title>
            <indexterm zone="ref_guide_mapping_jpa_map">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    maps
                </secondary>
            </indexterm>
            <para>
We detailed the <literal>ContainerTable</literal> annotation in
<xref linkend="ref_guide_mapping_jpa_coll_table"/>. Custom map mappings may
also use this annotation to represent a map table.
            </para>
    <section id="ref_guide_mapping_jpa_map_keycols">
        <title>Key Columns</title>
        <indexterm zone="ref_guide_mapping_jpa_map_keycols">
            <primary>KeyColumn</primary>
            <seealso>mapping metadata</seealso>
        </indexterm>
        <para>
        Key columns serve the same role for map keys as the element
        join columns described in
        <xref linkend="ref_guide_mapping_jpa_coll_joincols"/> serve for
        collection elements.  OpenJPA's
        <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/KeyColumn.html">
        <classname>org.apache.openjpa.persistence.jdbc.KeyColumn</classname>
        </ulink> annotation represents a map key.  To map custom
        multi-column keys, use the
        <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/KeyColumns.html">
        <classname>org.apache.openjpa.persistence.jdbc.KeyColumns</classname>
        </ulink> annotation, whose value is an array of <classname>KeyColumn</classname>s.
        </para>
        <para>
        A <classname>KeyColumn</classname> always resides in
        a container table, so it does not have the <literal>table</literal>
        property of a standard <classname>Column</classname>.  Otherwise, the
        <classname>KeyColumn</classname> and standard <classname>Column</classname>
        annotations are equivalent.  See
        <xref linkend="jpa_overview_mapping_column"/> in the JPA
        Overview for a review of the <classname>Column</classname> annotation.
        </para>
    </section>
    <section id="ref_guide_mapping_jpa_map_keyjoincols">
        <title>Key Join Columns</title>
        <indexterm zone="ref_guide_mapping_jpa_map_keyjoincols">
            <primary>KeyJoinColumn</primary>
            <seealso>mapping metadata</seealso>
        </indexterm>
        <para>
        Key join columns are equivalent to standard JPA
        join columns, except that they represent a join to a map key entity rather than a direct relation.  You represent
        a key join column with OpenJPA's
        <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/KeyJoinColumn.html">
        <classname>org.apache.openjpa.persistence.jdbc.KeyJoinColumn</classname></ulink> annotation.  To declare a compound join, enclose an
        array of <classname>KeyJoinColumn</classname>s in the
        <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/KeyJoinColumns.html">
        <classname>org.apache.openjpa.persistence.jdbc.KeyJoinColumns</classname>
        </ulink> annotation.
        </para>
        <para>
        A <classname>KeyJoinColumn</classname> always resides in
        a container table, so it does not have the <literal>table</literal> property
        of a standard <classname>JoinColumn</classname>.  Like <classname>XJoinColumn</classname>s above,
        <classname>KeyJoinColumn</classname>s can reference a linked field
        rather than a static linked column.  Otherwise, the <classname>KeyJoinColumn</classname>
        and standard <classname>JoinColumn</classname> annotations are equivalent.  See
        <xref linkend="jpa_overview_mapping_rel"/> in the JPA
        Overview for a review of the <classname>JoinColumn</classname> annotation.
        </para>
    </section>
    <section id="ref_guide_mapping_jpa_map_embedkey">
        <title>Key Embedded Mapping</title>
        <indexterm zone="ref_guide_mapping_jpa_map_embedkey">
            <primary>KeyEmbeddedMapping</primary>
            <seealso>mapping metadata</seealso>
        </indexterm>
        <para>
        The
        <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/KeyEmbeddedMapping.html">
        <classname>org.apache.openjpa.persistence.jdbc.KeyEmbeddedMapping</classname>
        </ulink> annotation allows you to map your map field's embedded
        key type to your container table.  This annotation has exactly
        the same properties as the
        <classname>EmbeddedMapping</classname> annotation described
        <link linkend="ref_guide_mapping_jpa_embed">above</link>.
        </para>
    </section>
    <section id="ref_guide_mapping_jpa_map_ex">
        <title>Examples</title>
        <mediaobject>
            <imageobject>
                <!-- PNG image data, 410 x 266 (see README) -->
                <imagedata fileref="img/string-rel-map.png" width="273px"/>
            </imageobject>
        </mediaobject>
        <para>
        Map mapping in OpenJPA uses the same principles you saw in
        collection mapping.  The example below maps the <literal>
        Article.authors</literal> map according to the diagram above.
        </para>
        <example id="ref_guide_mapping_jpa_map_stringrelmap">
            <title>String Key, Entity Value Map Mapping</title>
<programlisting>
package org.mag.pub;

import org.apache.openjpa.persistence.*;
import org.apache.openjpa.persistence.jdbc.*;

@Entity
@Table(name="AUTH")
@DataStoreIdColumn(name="AID", columnDefinition="INTEGER64")
public class Author {
    ...
}

package org.mag;

@Entity
@Table(name="ART")
public class Article {
    @Id private long id;

    @PersistentMap
    @ContainerTable(name="ART_AUTHS", joinColumns=@XJoinColumn(name="ART_ID"))
    @KeyColumn(name="LNAME")
    @ElementJoinColumn(name="AUTH_ID")
    private Map&lt;String,Author&gt; authors;

    ...
}
</programlisting>
                </example>
            </section>
        </section>
        <section id="ref_guide_mapping_jpa_constraints">
            <title>
                Indexes and Constraints
            </title>
            <para>
OpenJPA uses index information during schema generation to index the proper
columns. OpenJPA uses foreign key and unique constraint information during
schema creation to generate the proper database constraints, and also at runtime
to order SQL statements to avoid constraint violations while maximizing SQL
batch size.
            </para>
            <para>
OpenJPA assumes certain columns have indexes or constraints based on your
mapping defaults, as detailed in <xref linkend="ref_guide_mapping_defaults"/>.
You can override the configured defaults on individual joins, field
values, collection elements, map keys, or map values using the annotations
presented in the following sections.
            </para>
            <section id="ref_guide_mapping_jpa_index">
                <title>
                    Indexes
                </title>
                <indexterm zone="ref_guide_mapping_jpa_index">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        indexes
                    </secondary>
                </indexterm>
                <indexterm zone="ref_guide_mapping_jpa_index">
                    <primary>
                        indexes
                    </primary>
                </indexterm>
                <para>
The <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Index.html">
<classname>org.apache.openjpa.persistence.jdbc.Index</classname></ulink>
annotation represents an index on the columns of a field. It is also used within
the <link linkend="ref_guide_mapping_jpa_coll_table"><classname>ContainerTable
</classname></link> annotation to index join columns.
To index the columns of a collection element, use the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementIndex.html">
<classname> org.apache.openjpa.persistence.jdbc.ElementIndex</classname></ulink>
annotation. These annotations have the following properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>boolean enabled</literal>: Set this property to <literal>false
</literal> to explicitly tell OpenJPA not to index these columns, when OpenJPA
would otherwise do so.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String name</literal>: The name of the index. OpenJPA will choose a
name if you do not provide one.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean unique</literal>: Whether to create a unique index. Defaults
to false.
                        </para>
                    </listitem>
                </itemizedlist>
            </section>
            <section id="ref_guide_mapping_jpa_fk">
                <title>
                    Foreign Keys
                </title>
                <indexterm zone="ref_guide_mapping_jpa_fk">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        foreign keys
                    </secondary>
                </indexterm>
                <indexterm zone="ref_guide_mapping_jpa_fk">
                    <primary>
                        foreign keys
                    </primary>
                </indexterm>
                <para>
The <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ForeignKey.html">
<classname>org.apache.openjpa.persistence.jdbc.ForeignKey</classname></ulink>
annotation represents a foreign key on the columns of a field. It is also used
within the <link linkend="ref_guide_mapping_jpa_coll_table"><classname>
ContainerTable</classname></link> annotation to set a database foreign key on
join columns.  To set a constraint to the columns of a collection element, use
the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementForeignKey.html">
<classname> org.apache.openjpa.persistence.jdbc.ElementForeignKey</classname>
</ulink> annotation. These annotations have the following properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>boolean enabled</literal>: Set this property to <literal>false
</literal> to explicitly tell OpenJPA not to set a foreign key on these columns,
when OpenJPA would otherwise do so.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String name</literal>: The name of the foreign key. OpenJPA will
choose a name if you do not provide one, or will create an anonymous key.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean deferred</literal>: Whether to create a deferred key if
supported by the database.
                        </para>
                    </listitem>
                    <listitem>
                    <para>
<literal>boolean implicit</literal>: Whether to mark a relation field value as
implicitly referring to a related entity. This property can be used, for
example, when a field value represents primary key field of a related
entity, but for legacy or other logistic reasons, the field is declared as the
same type of the primary key of the related entity instead of a reference to
the entity itself. Hence no actual mapping can be defined on the field itself.
If this implicit property is set, then no other property on
the ForeignKey annotation can be set to their non-default value. This setting
does not manifest as a database foreign key constraint.
                    </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>ForeignKeyAction deleteAction</literal>: Value from the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ForeignKeyAction.html">
<classname>org.apache.openjpa.persistence.jdbc.ForeignKeyAction</classname>
</ulink> enum identifying the desired delete action. Defaults to <literal>
RESTRICT</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>ForeignKeyAction updateAction</literal>: Value from the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ForeignKeyAction.html">
<classname>org.apache.openjpa.persistence.jdbc.ForeignKeyAction</classname>
</ulink> enum identifying the desired update action. Defaults to <literal>
RESTRICT</literal>.
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
Keep in mind that OpenJPA uses foreign key information at runtime to avoid
constraint violations; it is important, therefore, that your
<link linkend="ref_guide_mapping_defaults">mapping defaults</link> and foreign
key annotations combine to accurately reflect your existing database
constraints, or that  you configure OpenJPA to reflect on your database schema
to discover existing foreign keys (see
<xref linkend="ref_guide_schema_info_factory"/>).
                </para>
            </section>
            <section id="ref_guide_mapping_jpa_unique">
                <title>
                    Unique Constraints
                </title>
                <indexterm zone="ref_guide_mapping_jpa_unique">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        unique constraints
                    </secondary>
                </indexterm>
                <indexterm zone="ref_guide_mapping_jpa_unique">
                    <primary>
                        unique constraints
                    </primary>
                </indexterm>
                <para>
The <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Unique.html">
<classname>org.apache.openjpa.persistence.jdbc.Unique</classname></ulink>
annotation represents a unique constraint on the columns of a field. It is more
convenient than using the <literal>uniqueConstraints</literal> property of
standard JPA <classname>Table</classname> and <classname>SecondaryTable
</classname> annotations, because you can apply it directly to the constrained
field. The <classname>Unique</classname> annotation has the following
properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>boolean enabled</literal>: Set this property to <literal>false
</literal> to explicitly tell OpenJPA not to constrain these columns, when
OpenJPA would otherwise do so.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>String name</literal>: The name of the constraint. OpenJPA will choose
a name if you do not provide one, or will create an anonymous constraint.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>boolean deferred</literal>: Whether to create a deferred constraint if
supported by the database.
                        </para>
                    </listitem>
                </itemizedlist>
            </section>
        </section>
        <section id="ref_guide_xmlmapping">
		    <title>
              XML Column Mapping
            </title>
              <indexterm zone="ref_guide_xmlmapping">
                  <primary>
                      mapping metadata
                  </primary>
                  <secondary>
                      xml column mapping
                  </secondary>
              </indexterm>
              <indexterm zone="ref_guide_xmlmapping">
                  <primary>
                      xml mapping column
                  </primary>
              </indexterm>
              <para>
Some databases support XML column types and
XPath queries and indexes over these columns. OpenJPA supports mapping of an
entity property mapped to an XML column on the following databases and their
minimum versions.
              </para>
              <itemizedlist>
                  <listitem>
                      <para>
DB2 9
                      </para>
                  </listitem>
                  <listitem>
                      <para>
MySQL 5.1.30
                      </para>
                  </listitem>
                  <listitem>
                      <para>
Oracle 9
                      </para>
                  </listitem>
                  <listitem>
                      <para>
PostgreSQL 8.3 (XML support must be compiled in, the minimum JDBC driver
version is 8.3-603)
                      </para>
                  </listitem>
                  <listitem>
                      <para>
SQL Server 2005
                      </para>
                  </listitem>
              </itemizedlist>
              <para>
See <xref linkend="supported_databases"/> for possible database-specific
restrictions.
              </para>
              <para>
Annotate the entity property using the XMLValueHandler strategy:
		      </para>
<programlisting>
@Persistent
@Strategy(&quot;org.apache.openjpa.jdbc.meta.strats.XMLValueHandler&quot;)
</programlisting>
              <para>
The default fetch type is EAGER but can be changed to LAZY by using:
              </para>
<programlisting>
@Persistence(fetch=FetchType.LAZY)
</programlisting>
              <para>
The entity property class is required to have
JAXB binding annotations. You can generate property class from an XML schema by using
the <literal>xjc</literal> generator from the
<ulink url="http://jaxb.java.net/">JAXB reference implementation</ulink>.
The <literal>xjc</literal> will generate the
class along with the required annotations. Ensure that <classname>@XmlRootElement</classname>
appears in the root class. In some cases this annotation needs to be added manually.
              </para>
              <para>
The entity property class is required to have getter and setter methods for all its
fields. By default, the <literal>xjc</literal> will not generate setter
methods for collections but you can force it to do so by using the
<ulink url="http://confluence.highsource.org/display/J2B/Setters+Plugin">
setters plugin</ulink>
or collection setter injector plugin.
              </para>
              <para>
The JAXB jar files must be on the application classpath (jaxb-api.jar,
jaxb-impl.jar, jsr173_1.0_api.jar or equivalent).
              </para>
              <para>
JPQL path expressions can navigate into the mapped class and its
subfields to any level.
              </para>
              <para>
The path expression is rewritten into an equivalent XPath expression using SQL
XML functions.
              </para>
              <para>
The path expression must be single-valued. Path expressions over XML
mapped classes can only be used in the WHERE clause as an operand to a simple predicate
(=  &lt;&gt;  &lt;  &gt;  &gt;=  &lt;=).
              </para>
              <para>
Path expressions over XML mapped fields can not be:
              </para>
		      <itemizedlist>
                  <listitem>
                      <para>
an input to a JPQL scalar function
                      </para>
                  </listitem>
                  <listitem>
                      <para>
an operand of BETWEEN,  IS NULL, LIKE or IN predicate
                      </para>
                  </listitem>
                  <listitem>
                      <para>
used to project out subfields in the SELECT clause
                      </para>
                  </listitem>
                  <listitem>
                      <para>
used in the FROM, GROUP BY, HAVING, ORDER BY clauses
                      </para>
                  </listitem>
              </itemizedlist>
              <para>
XML schema must not contain namespace declarations. The JPQL path
expressions can not refer to Java fields generated from XML ANY type or
XML mixed element types.
              </para>
              <para>
The data type generated by JAXB must be a valid type
to use the property in a JPQL predicate.
              </para>
              <para>
Shown below is a sample XML schema <link linkend="ref_guide_xmlmapping_myaddress">myaddress.xsd</link>,
in which the JPA entity Order has <classname>shipAddress</classname> persistent field that maps to an XML column.
		      </para>
              <example id="ref_guide_xmlmapping_myaddress">
                   <title>
                       myaddress.xsd
                   </title>
<programlisting>
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; &gt;

&lt;xs:complexType name=&quot;Address&quot;&gt;
 &lt;xs:sequence&gt;
  &lt;xs:element name=&quot;Name&quot; type=&quot;xs:string&quot; /&gt;
  &lt;xs:element name=&quot;Street&quot; type=&quot;xs:string&quot;
  	minOccurs=&quot;1&quot; maxOccurs=&quot;3&quot; /&gt;
  &lt;xs:element name=&quot;City&quot; type=&quot;xs:string&quot; /&gt;
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;

&lt;xs:complexType name=&quot;CAN_Address&quot;&gt;
 &lt;xs:complexContent&gt;
  &lt;xs:extension base=&quot;Address&quot;&gt;
   &lt;xs:sequence&gt;
    &lt;xs:element name=&quot;Province&quot; type=&quot;xs:string&quot; /&gt;
    &lt;xs:element name=&quot;PostalCode&quot; type=&quot;xs:string&quot; /&gt;
   &lt;/xs:sequence&gt;
  &lt;/xs:extension&gt;
&lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:simpleType name=&quot;USPS_ZIP&quot;&gt;
 &lt;xs:restriction base=&quot;xs:integer&quot;&gt;
  &lt;xs:minInclusive value=&quot;01000&quot; /&gt;
  &lt;xs:maxInclusive value=&quot;99999&quot; /&gt;
 &lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;

&lt;xs:complexType name=&quot;USA_Address&quot;&gt;
 &lt;xs:complexContent&gt;
  &lt;xs:extension base=&quot;Address&quot;&gt;
   &lt;xs:sequence&gt;
    &lt;xs:element name=&quot;State&quot; type=&quot;xs:string&quot; /&gt;
    &lt;xs:element name=&quot;ZIP&quot; type=&quot;USPS_ZIP&quot; /&gt;
   &lt;/xs:sequence&gt;
  &lt;/xs:extension&gt;
 &lt;/xs:complexContent&gt;
&lt;/xs:complexType&gt;

&lt;xs:element name=&quot;MailAddress&quot; type=&quot;Address&quot; /&gt;
&lt;xs:element name=&quot;AddrCAN&quot; type=&quot;CAN_Address&quot;
   substitutionGroup=&quot;MailAddress&quot; /&gt;
&lt;xs:element name=&quot;AddrUSA&quot; type=&quot;USA_Address&quot;
   substitutionGroup=&quot;MailAddress&quot; /&gt;
&lt;/xs:schema&gt;
</programlisting>
              </example>
              <para>
Java classes <link linkend="ref_guide_xmlmapping_address">Address</link>,
<link linkend="ref_guide_xmlmapping_usaaddress">USAAddress</link> and
<link linkend="ref_guide_xmlmapping_canaddress">CANAddress</link>
are produced from <literal>myaddress</literal> schema by using the
<literal>xjc</literal> generator.
              </para>
              <example id="ref_guide_xmlmapping_address">
                  <title>
                       Address.java
                  </title>
<programlisting>
    ...
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = &quot;Address&quot;, propOrder = {
    &quot;name&quot;,
    &quot;street&quot;,
    &quot;city&quot;
})
public class Address {
    @XmlElement(name = &quot;Name&quot;, required = true)
    protected String name;
    @XmlElement(name = &quot;Street&quot;, required = true)
    protected List&lt;String&gt; street;
    @XmlElement(name = &quot;City&quot;, required = true)
    protected String city;

   /**
     * Getter and Setter methods.
     *
     */
     ...
}
</programlisting>
            </example>
            <example id="ref_guide_xmlmapping_usaaddress">
                <title>
                    USAAddress.java
                </title>
<programlisting>
    ...
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = &quot;USA_Address&quot;, propOrder = {
    &quot;state&quot;,
    &quot;zip&quot;
})
public class USAAddress
    extends Address
{

    @XmlElement(name = &quot;State&quot;)
    protected String state;
    @XmlElement(name = &quot;ZIP&quot;)
    protected int zip;

   /**
     * Getter and Setter methods.
     *
     */
     ...
}
</programlisting>
            </example>
            <example id="ref_guide_xmlmapping_canaddress">
                <title>
                    CANAddress.java
                </title>
<programlisting>
     ...
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = &quot;CAN_Address&quot;, propOrder = {
    &quot;province&quot;,
    &quot;postalCode&quot;
})
public class CANAddress
    extends Address
{

    @XmlElement(name = &quot;Province&quot;)
    protected String province;
    @XmlElement(name = &quot;PostalCode&quot;)
    protected String postalCode;

   /**
     * Getter and Setter methods.
     *
     */
     ...
}
</programlisting>
            </example>
            <example id="ref_guide_xmlmapping_annorder">
                <title>
                    Showing annotated Order entity with XML mapping strategy
                </title>
<programlisting>
@Entity
public class Order {
    @Id  private into id;
    @Persistent
    @Strategy (&quot;org.apache.openjpa.jdbc.meta.strats.XMLValueHandler&quot;)
    private Address shipAddress;
    ...
}
</programlisting>
            </example>
            <example id="ref_guide_xmlmapping_createorder">
             <title>
                 Showing creation of Order entity having shipAddress mapped to XML column
             </title>
<programlisting>
...
myaddress.ObjectFactory addressFactory = new myaddress.ObjectFactory();
Customer c1 = new Customer();
c1.setCid( new Customer.CustomerKey(&quot;USA&quot;, 1) );
c1.setName(&quot;Harry's Auto&quot;);
Order o1 = new Order( 850, false, c1);
USAAddress addr1 = addressFactory.createUSAAddress();
addr1.setCity(&quot;San Jose&quot;);
addr1.setState(&quot;CA&quot;);
addr1.setZIP(new Integer(&quot;95141&quot;));
addr1.getStreet().add(&quot;12500 Monterey&quot;);
addr1.setName( c1.getName());
o1.setShipAddress(addr1);
em.persist(o1);
...
</programlisting>
            </example>
            <example id="ref_guide_xmlmapping_jpqlquery">
                <title>
                    Sample JPQL queries for XML column mapping
                </title>
<programlisting>
. select o from Order o where o.shipAddress.city = &quot;San Jose&quot; or
			      o.shipAddress.city = &quot;San Francisco&quot;  (OK)

. select o.shipaAddress from Order o  (OK)

. select o.shipAddress.city from Order o  (INVALID)

. select o from Order o where o.shipAddress.street = &quot;San Jose&quot;  (INVALID multi-valued)
</programlisting>
            </example>
        </section>
        <section id="ref_guide_streamsupport">
            <title>
                LOB Streaming
            </title>
            <indexterm zone="ref_guide_streamsupport">
                <primary>
                    lob streaming
                </primary>
            </indexterm>
            <para>
In addition to handling LOBs in a standard JPA manner
(<classname>LOB</classname> annotation and <literal>lob</literal> XML element),
OpenJPA supports LOB streaming. This feature
makes it possible to stream large amounts of data into and out of persistent
field without ever holding all the data in memory at the same time.
            </para>
            <para>
LOB streaming is supported on the following databases.
            </para>
            <itemizedlist>
                <listitem>
                    <para>
MySQL
                    </para>
                </listitem>
                <listitem>
                    <para>
Oracle
                    </para>
                </listitem>
                <listitem>
                    <para>
PostgreSQL
                    </para>
                </listitem>
                <listitem>
                    <para>
SQL Server
                    </para>
                </listitem>
                <listitem>
                    <para>
DB2
                    </para>
                </listitem>
            </itemizedlist>
            <para>
See <xref linkend="supported_databases"/> for possible database-specific
restrictions.
            </para>
            <para>
To persist a stream, apply the
<ulink url="../../apidocs/org/apache/openjpa/persistence/Persistent.html">
<classname>org.apache.openjpa.persistence.Persistent</classname></ulink>
annotation to either <classname>java.io.InputStream</classname> or
<classname>java.io.Reader</classname> field.
            </para>
            <example id="ref_guide_streamsupport_example">
                <title>
                    Annotated InputStream and Reader
                </title>
<programlisting>
@Entity
public class Employee {
    ...
    @Persistent
    private InputStream photoStream;

    @Persistent
    private Reader photoDescription;
    ...
}
</programlisting>
            </example>
        </section>
    </section>
    <section id="ref_guide_mapping_limits">
        <title>
            Mapping Limitations
        </title>
        <indexterm zone="ref_guide_mapping_limits">
            <primary>
                mapping metadata
            </primary>
            <secondary>
                limitations
            </secondary>
        </indexterm>
        <para>
The following sections outline the limitations OpenJPA places on specific
mapping strategies.
        </para>
        <section id="ref_guide_mapping_limits_tpc">
            <title>
                Table Per Class
            </title>
            <indexterm zone="ref_guide_mapping_limits">
                <primary>
                    mapping metadata
                </primary>
                <secondary>
                    limitations
                </secondary>
                <tertiary>
                    table-per-class
                </tertiary>
            </indexterm>
            <para>
Table-per-class inheritance mapping has the following limitations:
            </para>
            <itemizedlist>
                <listitem>
                    <para>
You cannot traverse polymorphic relations to non-leaf classes in a
table-per-class inheritance hierarchy in queries.
                    </para>
                </listitem>
                <listitem>
                    <para>
You cannot map a one-sided polymorphic relation to a non-leaf class in a
table-per-class inheritance hierarchy using an inverse foreign key.
                    </para>
                </listitem>
                <listitem>
                    <para>
You cannot use an order column in a polymorphic relation to a non-leaf class in
a table-per-class inheritance hierarchy mapped with an inverse foreign key.
                    </para>
                </listitem>
                <listitem>
                    <para>
Table-per-class hierarchies impose limitations on eager fetching. See
<xref linkend="ref_guide_perfpack_eager_consider"/>.
                    </para>
                </listitem>
            </itemizedlist>
            <note>
                <para>
Non-polymorphic relations do not suffer from these limitations. You can declare
a non-polymorphic relation using the extensions described in
<xref linkend="nonpolymorphic"/>.
                </para>
            </note>
        </section>
    </section>
    <section id="ref_guide_mapping_ext">
        <title>
            Mapping Extensions
        </title>
        <para>
Mapping extensions allow you to access OpenJPA-specific functionality from your
mappings. Note that all extensions below are specific to mappings. If you store
your mappings separately from your persistence metadata, these extensions must
be specified along with the mapping information, not the persistence metadata
information.
        </para>
        <section id="ref_guide_mapping_ext_cls">
            <title>
                Class Extensions
            </title>
            <para>
OpenJPA recognizes the following class extensions.
            </para>
            <section id="subclass-fetch-mode">
                <title>
                    Subclass Fetch Mode
                </title>
                <indexterm zone="subclass-fetch-mode">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        subclass fetch mode
                    </tertiary>
                    <seealso>
                        eager fetching
                    </seealso>
                </indexterm>
                <para>
This extension specifies how to eagerly fetch subclass state. It overrides the
global <link linkend="openjpa.jdbc.SubclassFetchMode"><literal>
openjpa.jdbc.SubclassFetchMode</literal></link> property. Set the OpenJPA
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/SubclassFetchMode.html">
<classname>org.apache.openjpa.persistence.jdbc.SubclassFetchMode</classname>
</ulink> annotation to a value from the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/FetchMode.html">
<classname>org.apache.openjpa.persistence.jdbc.FetchMode</classname>
</ulink> enum: <literal>JOIN</literal>, <literal>PARALLEL</literal>, or
<literal>NONE</literal>. See <xref linkend="ref_guide_perfpack_eager"/>
 for a discussion of eager fetching.
                </para>
            </section>
            <section id="class-strategy">
                <title>
                    Strategy
                </title>
                <indexterm zone="strategy">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        strategy
                    </tertiary>
                    <seealso>
                        custom mapping
                    </seealso>
                </indexterm>
                <para>
The <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Strategy.html">
<classname>org.apache.openjpa.persistence.jdbc.Strategy</classname></ulink>
class annotation allows you to specify a custom mapping strategy for your class.
See <xref linkend="ref_guide_mapping_custom"/> for information on custom
mappings.
                </para>
            </section>
            <section id="discriminator-strategy">
                <title>
                    Discriminator Strategy
                </title>
                <indexterm zone="strategy">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        discriminator strategy
                    </tertiary>
                    <seealso>
                        custom mapping
                    </seealso>
                </indexterm>
                <para>
The
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/DiscriminatorStrategy.html">
<classname>org.apache.openjpa.persistence.jdbc.DiscriminatorStrategy</classname>
</ulink> class annotation allows you to specify a custom discriminator strategy.
See <xref linkend="ref_guide_mapping_custom"/> for information on custom
mappings.
                </para>
            </section>
            <section id="version-strategy">
                <title>
                    Version Strategy
                </title>
                <indexterm zone="strategy">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        version strategy
                    </tertiary>
                    <seealso>
                        custom mapping
                    </seealso>
                </indexterm>
                <para>
The
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/VersionStrategy.html">
<classname>org.apache.openjpa.persistence.jdbc.VersionStrategy</classname>
</ulink> class annotation allows you to specify a custom version strategy. See
<xref linkend="ref_guide_mapping_custom"/> for information on custom
mappings.
                </para>
            </section>
        </section>
        <section id="ref_guide_mapping_ext_field">
            <title>
                Field Extensions
            </title>
            <para>
OpenJPA recognizes the following field extensions.
            </para>
            <section id="eager-fetch-mode">
                <title>
                    Eager Fetch Mode
                </title>
                <indexterm zone="eager-fetch-mode">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        eager fetch mode
                    </tertiary>
                    <seealso>
                        eager fetching
                    </seealso>
                </indexterm>
                <para>
This extension specifies how to eagerly fetch related objects. It overrides the
global <link linkend="openjpa.jdbc.EagerFetchMode"><literal>
openjpa.jdbc.EagerFetchMode</literal></link> property. Set the OpenJPA
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/EagerFetchMode.html">
<classname>org.apache.openjpa.persistence.jdbc.EagerFetchMode</classname>
</ulink> annotation to a value from the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/FetchMode.html">
<classname>org.apache.openjpa.persistence.jdbc.FetchMode</classname>
</ulink> enum: <literal>JOIN</literal>, <literal>PARALLEL</literal>, or
<literal>NONE</literal>. See <xref linkend="ref_guide_perfpack_eager"/>
 for a discussion of eager fetching.
                </para>
            </section>
            <section id="nonpolymorphic">
                <title>
                    Nonpolymorphic
                </title>
                <indexterm zone="nonpolymorphic">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        nonpolymorphic
                    </tertiary>
                </indexterm>
                <para>
All fields in Java are polymorphic. If you declare a field of type <literal>T
</literal>, you can assign any subclass of <literal>T</literal> to the field as
well. This is very convenient, but can make relation traversal very inefficient
under some inheritance strategies. It can even make querying across the field
impossible. Often, you know that certain fields do not need to be entirely
polymorphic. By telling OpenJPA about such fields, you can improve the
efficiency of your relations.
                </para>
                <note>
                    <para>
OpenJPA also includes the <literal>type</literal> metadata extension for
narrowing the declared type of a field. See <xref linkend="type"/>.
                    </para>
                </note>
                <para>
OpenJPA defines the following extensions for nonpolymorphic values:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Nonpolymorphic.html">
<classname>org.apache.openjpa.persistence.jdbc.Nonpolymorphic</classname>
</ulink>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementNonpolymorphic.html">
<classname>org.apache.openjpa.persistence.jdbc.ElementNonpolymorphic</classname>
</ulink>
                        </para>
                    </listitem>
                </itemizedlist>
                <para>
The value of these extensions is a constant from the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/NonpolymorphicType.html">
<classname>org.apache.openjpa.persistence.jdbc.NonpolymorphicType</classname>
</ulink> enumeration. The default value, <literal>EXACT</literal>, indicates
that the relation will always be of the exact declared type. A value of
<literal>JOINABLE</literal>, on the other hand, means that the relation might
be to any joinable subclass of the declared type. This value only excludes
table-per-class subclasses.
                </para>
            </section>
            <section id="class-criteria">
                <title>
                    Class Criteria
                </title>
                <indexterm zone="eager-fetch-mode">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        class criteria
                    </tertiary>
                    <seealso>
                        joins
                    </seealso>
                </indexterm>
                <indexterm zone="eager-fetch-mode">
                    <primary>
                        joins
                    </primary>
                    <secondary>
                        class criteria
                    </secondary>
                </indexterm>
                <para>
This family of boolean extensions determines whether OpenJPA will use the
expected class of related objects as criteria in the SQL it issues to load a
relation field. Typically, this is not needed. The foreign key values uniquely
identify the record for the related object. Under some rare mappings, however,
you may need to consider both foreign key values and the expected class of the
related object - for example, if you have an inverse relation that shares the
foreign key with another inverse relation to an object of a different subclass.
In these cases, set the proper class criteria extension to <literal>true
</literal> to force OpenJPA to append class criteria to its select SQL.
                </para>
                <para>
OpenJPA defines the following class criteria annotations for field relations and
array or collection element relations, respectively:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ClassCriteria.html">
<classname>org.apache.openjpa.persistence.jdbc.ClassCriteria</classname></ulink>
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/ElementClassCriteria.html">
<classname>org.apache.openjpa.persistence.jdbc.ElementClassCriteria</classname>
</ulink>
                        </para>
                    </listitem>
                </itemizedlist>
            </section>
            <section id="strategy">
                <title>
                    Strategy
                </title>
                <indexterm zone="strategy">
                    <primary>
                        mapping metadata
                    </primary>
                    <secondary>
                        extensions
                    </secondary>
                    <tertiary>
                        strategy
                    </tertiary>
                    <seealso>
                        custom mapping
                    </seealso>
                </indexterm>
                <para>
OpenJPA's
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Strategy.html">
<classname>org.apache.openjpa.persistence.jdbc.Strategy</classname></ulink>
extension allows you to specify a custom mapping
strategy or value handler for a field. See
<xref linkend="ref_guide_mapping_custom"/> for information on custom
mappings.
                </para>
            </section>
        </section>
    </section>
    <section id="ref_guide_mapping_custom">
        <title>
            Custom Mappings
        </title>
        <indexterm zone="ref_guide_mapping_custom">
            <primary>
                custom mapping
            </primary>
        </indexterm>
        <indexterm>
            <primary>
                mapping metadata
            </primary>
            <secondary>
                custom mapping
            </secondary>
            <see>
                custom mapping
            </see>
        </indexterm>
        <para>
In OpenJPA, you are not limited to the set of standard mappings defined by the
specification. OpenJPA allows you to define custom class, discriminator,
version, and field mapping strategies with all the power of OpenJPA's built-in
strategies.
        </para>
        <section id="ref_guide_mapping_custom_class">
            <title>
                Custom Class Mapping
            </title>
            <para>
To create a custom class mapping, write an implementation of the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/ClassStrategy.html">
<classname>org.apache.openjpa.jdbc.meta.ClassStrategy</classname></ulink>
interface. You will probably want to extend one of the existing abstract or
concrete strategies in the <literal>org.apache.openjpa.jdbc.meta.strats
</literal> package.
            </para>
            <para>
The <ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Strategy.html">
<classname>org.apache.openjpa.persistence.jdbc.Strategy</classname></ulink>
annotation allows you to declare a custom class mapping strategy in JPA mapping
metadata. Set the value of the annotation to the full class name of your custom
strategy. You can configure your strategy class' bean properties using
OpenJPA's plugin syntax, detailed in <xref linkend="ref_guide_conf_plugins"/>.
            </para>
        </section>
        <section id="ref_guide_mapping_custom_versdiscrim">
            <title>
                Custom Discriminator and Version Strategies
            </title>
            <para>
To define a custom discriminator or version strategy, implement the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/DiscriminatorStrategy.html">
<classname>org.apache.openjpa.jdbc.meta.DiscriminatorStrategy</classname>
</ulink> or
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/VersionStrategy.html">
<classname>org.apache.openjpa.jdbc.meta.VersionStrategy</classname></ulink>
interface, respectively. You might extend one of the existing abstract or
concrete strategies in the <literal>org.apache.openjpa.jdbc.meta.strats
</literal> package.
            </para>
            <para>
OpenJPA includes the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/DiscriminatorStrategy.html">
<classname>org.apache.openjpa.persistence.jdbc.DiscriminatorStrategy</classname>
</ulink> and
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/VersionStrategy.html">
<classname>org.apache.openjpa.persistence.jdbc.VersionStrategy</classname>
</ulink> class annotations for declaring a custom discriminator or version
strategy in JPA mapping metadata. Set the string value of these annotations to
the full class name of your implementation, or to the class name or alias of an
existing OpenJPA implementation.
            </para>
            <para>
As with custom class mappings, you can configure your strategy class' bean
properties using OpenJPA's plugin syntax, detailed in
<xref linkend="ref_guide_conf_plugins"/>.
            </para>
        </section>
        <section id="ref_guide_mapping_custom_field">
            <title>
                Custom Field Mapping
            </title>
            <indexterm zone="ref_guide_mapping_custom_field">
                <primary>
                    custom mapping
                </primary>
                <secondary>
                    field mapping
                </secondary>
            </indexterm>
            <para>
While custom class, discriminator, and version mapping can be useful, custom
field mappings are far more common. OpenJPA offers two types of custom field
mappings: value handlers, and full custom field strategies. The following
sections examine each.
            </para>
            <section id="ref_guide_mapping_custom_vhandler">
                <title>
                    Value Handlers
                </title>
                <indexterm zone="ref_guide_mapping_custom_fieldstrat">
                    <primary>
                        custom mapping
                    </primary>
                    <secondary>
                        field mapping
                    </secondary>
                    <tertiary>
                        value handler
                    </tertiary>
                </indexterm>
                <para>
Value handlers make it trivial to map any type that you can break down into one
or more simple values. All value handlers implement the <classname>
org.apache.openjpa.jdbc.meta.ValueHandler</classname> interface; see its
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/ValueHandler.html"> Javadoc
</ulink> for details.  Also, examine the built-in handlers in the <filename>
src/openjpa/jdbc/meta/strats</filename> directory of your OpenJPA source
distribution.  Use these functional implementations as examples when you
create your own value handlers.
                </para>
            </section>
            <section id="ref_guide_mapping_custom_fieldstrat">
                <title>
                    Field Strategies
                </title>
                <indexterm zone="ref_guide_mapping_custom_fieldstrat">
                    <primary>
                        custom mapping
                    </primary>
                    <secondary>
                        field mapping
                    </secondary>
                    <tertiary>
                        field strategy
                    </tertiary>
                </indexterm>
                <para>
OpenJPA interacts with persistent fields through the
<ulink url="../../apidocs/org/apache/openjpa/jdbc/meta/FieldStrategy"><classname>
org.apache.openjpa.jdbc.meta.FieldStrategy</classname></ulink> interface. You
can implement this interface yourself to create a custom field strategy, or
extend one of the existing abstract or concrete strategies in the <literal>
org.apache.openjpa.jdbc.meta.strats</literal> package. Creating a custom field
strategy is more difficult than writing a custom value handler, but gives you
more freedom in how you interact with the database.
                </para>
            </section>
            <section id="ref_guide_mapping_custom_field_conf">
                <title>
                    Configuration
                </title>
                <indexterm zone="ref_guide_mapping_custom_field_conf">
                    <primary>
                        custom mapping
                    </primary>
                    <secondary>
                        field mapping
                    </secondary>
                    <tertiary>
                        configuration
                    </tertiary>
                </indexterm>
                <para>
OpenJPA gives you two ways to configure your custom field mappings. The
<literal>FieldStrategies</literal> property of the built-in <classname>
MappingDefaults</classname> implementations allows you to globally associate
field types with their corresponding custom value handler or strategy. OpenJPA
will automatically use your custom strategies when it encounters a field of the
associated type. OpenJPA will use your custom value handlers whenever it
encounters a field of the associated type.
<xref linkend="ref_guide_mapping_defaults"/> described mapping
defaults in detail.
                </para>
                <para>
Your other option is to explicitly install a custom value handler or strategy on
a particular field. To do so, specify the full name of your implementation class
in the proper mapping metadata extension. OpenJPA includes the
<ulink url="../../apidocs/org/apache/openjpa/persistence/jdbc/Strategy.html">
<classname>org.apache.openjpa.persistence.jdbc.Strategy</classname></ulink>
annotation. You can configure the named strategy or handler's bean
properties in these extensions using OpenJPA's plugin format (see
<xref linkend="ref_guide_conf_plugins"/>).
                </para>
            </section>
        </section>
    </section>
    <section id="ref_guide_orphan">
        <title>
            Orphaned Keys
        </title>
        <para>
Unless you apply database foreign key constraints extensively, it is possible to
end up with orphaned keys in your database. For example, suppose <classname>
Magazine</classname> <literal>m</literal> has a reference to <classname>Article
</classname><literal>a</literal>. If you delete <literal>a</literal> without
nulling <literal>m</literal>'s reference, <literal>m</literal>'s database
record will wind up with an orphaned key to the non-existent <literal>a
</literal> record.
        </para>
        <note>
            <para>
One way of avoiding orphaned keys is to use <emphasis>dependent</emphasis>
fields.
            </para>
        </note>
        <para>
OpenJPA's <link linkend="openjpa.OrphanedKeyAction"><literal>
openjpa.OrphanedKeyAction</literal></link> configuration property controls what
action to take when OpenJPA encounters an orphaned key. You can set this plugin
string (see <xref linkend="ref_guide_conf_plugins"/>) to a custom
implementation of the
<ulink url="../../apidocs/org/apache/openjpa/event/OrphanedKeyAction.html">
<classname> org.apache.openjpa.event.OrphanedKeyAction</classname></ulink>
interface, or use one of the built-in options:
        </para>
        <itemizedlist>
            <listitem>
                <para>
<literal>log</literal>: This is the default setting. This option logs a message
for each orphaned key. It is an alias for the
<ulink url="../../apidocs/org/apache/openjpa/event/LogOrphanedKeyAction.html">
<classname>org.apache.openjpa.event.LogOrphanedKeyAction</classname></ulink>
class, which has the following additional properties:
                </para>
                <itemizedlist>
                    <listitem>
                        <para>
<literal>Channel</literal>: The channel to log to. Defaults to <literal>
openjpa.Runtime</literal>.
                        </para>
                    </listitem>
                    <listitem>
                        <para>
<literal>Level</literal>: The level to log at. Defaults to <literal>WARN
</literal>.
                        </para>
                    </listitem>
                </itemizedlist>
            </listitem>
            <listitem>
                <para>
<literal>exception</literal>: Throw an <classname>
EntityNotFoundException</classname> when OpenJPA discovers an
orphaned key. This is an alias for the
<ulink url="../../apidocs/org/apache/openjpa/event/ExceptionOrphanedKeyAction.html">
<classname>org.apache.openjpa.event.ExceptionOrphanedKeyAction</classname>
</ulink> class.
                </para>
            </listitem>
            <listitem>
                <para>
<literal>none</literal>: Ignore orphaned keys. This is an alias for the
<ulink url="../../apidocs/org/apache/openjpa/event/NoneOrphanedKeyAction.html">
<classname>org.apache.openjpa.event.NoneOrphanedKeyAction</classname></ulink>
class.
                </para>
            </listitem>
        </itemizedlist>
        <example id="ref_guide_orphan_logex">
            <title>
                Custom Logging Orphaned Keys
            </title>
<programlisting>
&lt;property name="openjpa.OrphanedKeyAction" value="log(Channel=Orphans, Level=DEBUG)"/&gt;
</programlisting>
        </example>
    </section>
</chapter>
