You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by an...@apache.org on 2014/01/05 11:04:09 UTC

svn commit: r1555473 [2/2] - in /db/jdo/site/src/site: site.xml xdoc/annotations.xml

Added: db/jdo/site/src/site/xdoc/annotations.xml
URL: http://svn.apache.org/viewvc/db/jdo/site/src/site/xdoc/annotations.xml?rev=1555473&view=auto
==============================================================================
--- db/jdo/site/src/site/xdoc/annotations.xml (added)
+++ db/jdo/site/src/site/xdoc/annotations.xml Sun Jan  5 10:04:09 2014
@@ -0,0 +1,2719 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<document xmlns="http://maven.apache.org/XDOC/2.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+    <properties>
+        <title>JDO Annotations</title>
+    </properties>
+
+    <body>
+        <section name="JDO : Annotations">
+            <p>
+                One of the things that JDK 1.5 provides that can be of some use is annotations, and JDO provides its
+                own set. When selecting to use annotations please bear in mind the following :-
+            </p>
+            <ul>
+                <li>You must have the <b>jdo-api</b> jar in your CLASSPATH since this provides the annotations</li>
+                <li>Annotations should really only be used for attributes of persistence that you won't be changing
+                    at deployment. Things such as table and column names shouldn't really be specified using annotations
+                    although it is permitted. Instead it would be better to put such information in an ORM MetaData file.</li>
+                <li>Annotations can be added in two places - for the class as a whole, or for a field in particular.</li>
+                <li>You can annotate fields or getters with field-level information. If you annotate fields then the
+                    fields are processed for persistence. If you annotate the methods (getters) then the methods (properties)
+                    are processed for persistence.</li>
+                <li>Annotations are prefixed by the @ symbol and can take properties (in brackets after the name, 
+                    comma-separated)</li>
+            </ul>
+
+            <table>
+                <tr>
+                    <th>Annotation</th>
+                    <th>Class/Field/Method</th>
+                    <th>Description</th>
+                </tr>
+                <tr>
+                    <td><a href="#PersistenceCapable">@PersistenceCapable</a></td>
+                    <td>Class</td>
+                    <td>Specifies that the class/interface is persistent. In the case of an interface this would
+                        utilise JDO2's "persistent-interface" capabilities</td>
+                </tr>
+                <tr>
+                    <td><a href="#PersistenceAware">@PersistenceAware</a></td>
+                    <td>Class</td>
+                    <td>Specifies that the class is not persistent but needs to be able to access fields of persistent classes</td>
+                </tr>
+                <tr>
+                    <td><a href="#Cacheable_Class">@Cacheable</a></td>
+                    <td>Class</td>
+                    <td>Specifies whether this class can be cached in a Level 2 cache or not.</td>
+                </tr>
+                <tr>
+                    <td><a href="#EmbeddedOnly">@EmbeddedOnly</a></td>
+                    <td>Class</td>
+                    <td>Specifies that the class is persistent and can only be persisted embedded in another persistent class</td>
+                </tr>
+                <tr>
+                    <td><a href="#DatastoreIdentity">@DatastoreIdentity</a></td>
+                    <td>Class</td>
+                    <td>Specifies the details for generating datastore-identity for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Version">@Version</a></td>
+                    <td>Class</td>
+                    <td>Specifies any versioning process for objects of this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#FetchPlans">@FetchPlans</a></td>
+                    <td>Class</td>
+                    <td>Defines a series of fetch plans</td>
+                </tr>
+                <tr>
+                    <td><a href="#FetchPlan">@FetchPlan</a></td>
+                    <td>Class</td>
+                    <td>Defines a fetch plan</td>
+                </tr>
+                <tr>
+                    <td><a href="#FetchGroups">@FetchGroups</a></td>
+                    <td>Class</td>
+                    <td>Defines a series of fetch groups for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#FetchGroup">@FetchGroup</a></td>
+                    <td>Class</td>
+                    <td>Defines a fetch group for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Sequence">@Sequence</a></td>
+                    <td>Class</td>
+                    <td>Defines a sequence for use by this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Queries">@Queries</a></td>
+                    <td>Class</td>
+                    <td>Defines a series of named queries for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Query">@Query</a></td>
+                    <td>Class</td>
+                    <td>Defines a named query for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Inheritance">@Inheritance</a></td>
+                    <td>Class</td>
+                    <td>Specifies the inheritance model for persisting this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Discriminator">@Discriminator</a></td>
+                    <td>Class</td>
+                    <td>Specifies any discriminator for this class to be used for determining object types</td>
+                </tr>
+                <tr>
+                    <td><a href="#PrimaryKey_Class">@PrimaryKey</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines the primary key constraint for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Indices">@Indices</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a series of indices for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Index_Class">@Index</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines an index for the class as a whole (typically a composite index)</td>
+                </tr>
+                <tr>
+                    <td><a href="#Uniques">@Uniques</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a series of unique constraints for this class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Unique_Class">@Unique</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a unique constraint for the class as a whole (typically a composite)</td>
+                </tr>
+                <tr>
+                    <td><a href="#ForeignKeys">@ForeignKeys</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a series of foreign-keys (typically for non-mapped columns/tables)</td>
+                </tr>
+                <tr>
+                    <td><a href="#ForeignKey_Class">@ForeignKey</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a foreign-key for the class as a whole (typically for non-mapped columns/tables)</td>
+                </tr>
+                <tr>
+                    <td><a href="#Joins">@Joins</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a series of joins to secondary tables from this table</td>
+                </tr>
+                <tr>
+                    <td><a href="#Join_Class">@Join</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a join to a secondary table from this table</td>
+                </tr>
+                <tr>
+                    <td><a href="#Columns">@Columns</a></td>
+                    <td>Class</td>
+                    <td>ORM : Defines a series of columns that dont have associated fields ("unmapped columns")</td>
+                </tr>
+                <tr>
+                    <td><a href="#Persistent">@Persistent</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines the persistence for a field/property of the class</td>
+                </tr>
+                <tr>
+                    <td><a href="#Serialized">@Serialized</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines this field as being stored serialised</td>
+                </tr>
+                <tr>
+                    <td><a href="#NotPersistent">@NotPersistent</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines this field as being not persisted</td>
+                </tr>
+                <tr>
+                    <td><a href="#Transactional">@Transactional</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines this field as being transactional (not persisted, but managed)</td>
+                </tr>
+                <tr>
+                    <td><a href="#Cacheable">@Cacheable</a></td>
+                    <td>Field/Method</td>
+                    <td>Specifies whether this field/property can be cached in a Level 2 cache or not.</td>
+                </tr>
+                <tr>
+                    <td><a href="#PrimaryKey">@PrimaryKey</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines this field as being (part of) the primary key</td>
+                </tr>
+                <tr>
+                    <td><a href="#Element">@Element</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines the details of elements of an array/collection stored in this field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Key">@Key</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines the details of keys of a map stored in this field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Value">@Value</a></td>
+                    <td>Field/Method</td>
+                    <td>Defines the details of values of a map stored in this field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Order">@Order</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines the details of ordering of an array/collection stored in this field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Join">@Join</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines the join to a join table for a collection/array/map</td>
+                </tr>
+                <tr>
+                    <td><a href="#Embedded">@Embedded</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines that this field is embedded and how it is embedded</td>
+                </tr>
+                <tr>
+                    <td><a href="#Columns">@Columns</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines a series of columns where a field is persisted</td>
+                </tr>
+                <tr>
+                    <td><a href="#Column">@Column</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines a column where a field is persisted</td>
+                </tr>
+                <tr>
+                    <td><a href="#Index">@Index</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines an index for the field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Unique">@Unique</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines a unique constraint for the field</td>
+                </tr>
+                <tr>
+                    <td><a href="#ForeignKey">@ForeignKey</a></td>
+                    <td>Field/Method</td>
+                    <td>ORM : Defines a foreign key for the field</td>
+                </tr>
+                <tr>
+                    <td><a href="#Extensions">@Extensions</a></td>
+                    <td>Class/Field/Method</td>
+                    <td>Defines a series of JDO extensions</td>
+                </tr>
+                <tr>
+                    <td><a href="#Extension">@Extension</a></td>
+                    <td>Class/Field/Method</td>
+                    <td>Defines a JDO extension</td>
+                </tr>
+            </table>
+            <br/>
+
+            <a name="PersistenceCapable"/>
+            <subsection name="@PersistenceCapable">
+                <p>
+                    This annotation is used when you want to mark a class as persistent.
+                    It equates to the &lt;class&gt; MetaData element (though with only some of its attributes).
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>requiresExtent</td>
+                        <td>String</td>
+                        <td>Whether an extent is required for this class</td>
+                        <td>true</td>
+                    </tr>
+                    <tr>
+                        <td>embeddedOnly</td>
+                        <td>String</td>
+                        <td>Whether objects of this class can only be stored embedded in other objects</td>
+                        <td>false</td>
+                    </tr>
+                    <tr>
+                        <td>detachable</td>
+                        <td>String</td>
+                        <td>Whether objects of this class can be detached</td>
+                        <td>false</td>
+                    </tr>
+                    <tr>
+                        <td>identityType</td>
+                        <td>IdentityType</td>
+                        <td>Type of identity (APPLICATION, DATASTORE, NONDURABLE)</td>
+                        <td>DATASTORE</td>
+                    </tr>
+                    <tr>
+                        <td>objectIdClass</td>
+                        <td>Class</td>
+                        <td>Object-id class</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table where this class is persisted</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>catalog</td>
+                        <td>String</td>
+                        <td>ORM : Name of the catalog where this table is persisted</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>schema</td>
+                        <td>String</td>
+                        <td>ORM : Name of the schema where this table is persisted</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>cacheable</td>
+                        <td>String</td>
+                        <td>Whether the class can be L2 cached. <b>From JDO2.2</b></td>
+                        <td><b>true</b> | false</td>
+                    </tr>
+                    <tr>
+                        <td>serializeRead</td>
+                        <td>String</td>
+                        <td>Whether to default reads of this object type to lock the object</td>
+                        <td>false</td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable(identityType=IdentityType.APPLICATION)
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="PersistenceAware"/>
+            <subsection name="@PersistenceAware">
+                <p>
+                    This annotation is used when you want to mark a class as being used in persistence but not being persistable.
+                    That is "persistence-aware" in JDO terminology. It has no attributes.
+                    Specified on the <b>class</b>.
+                </p>
+                <source>
+@PersistenceAware
+public class MyClass
+{
+    ...
+}</source>
+                <p>See the documentation for <a href="class_types.html">Class Types</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Cacheable_Class"/>
+            <subsection name="@Cacheable">
+                <p>
+                    This annotation is a shortcut for @PersistenceCapable(cacheable={value}) specifying whether
+                    the class can be cached in a Level 2 cache.
+                    Specified on the <b>class</b>. The default
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td>String</td>
+                        <td>Whether the class is cacheable</td>
+                        <td><b>true</b> | false</td>
+                    </tr>
+                </table>
+                <source>
+@Cacheable("false")
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="EmbeddedOnly"/>
+            <subsection name="@EmbeddedOnly">
+                <p>
+                    This annotation is a shortcut for @PersistenceCapable(embeddedOnly="true") meaning that the class can only
+                    be persisted embedded into another class. It has no attributes.
+                    Specified on the <b>class</b>.
+                </p>
+                <source>
+@EmbeddedOnly
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Inheritance"/>
+            <subsection name="@Inheritance">
+                <p>
+                    Annotation used to define the inheritance for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>strategy</td>
+                        <td>InheritanceStrategy</td>
+                        <td>The inheritance strategy (NEW_TABLE, SUBCLASS_TABLE, SUPERCLASS_TABLE)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>customStrategy</td>
+                        <td>String</td>
+                        <td>Name of a custom inheritance strategy (depending on
+                        what your JDO implementation supports</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Inheritance(strategy=InheritanceStrategy.NEW_TABLE)
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Discriminator"/>
+            <subsection name="@Discriminator">
+                <p>
+                    Annotation used to define a discriminator to be stored with instances of this class and is used
+                    to determine the types of the objects being stored.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>strategy</td>
+                        <td>DiscriminatorStrategy</td>
+                        <td>The discriminator strategy (VALUE_MAP, CLASS_NAME, NONE)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td>String</td>
+                        <td>Value to use for instances of this type when using strategy of VALUE_MAP</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column to use to store the discriminator</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>indexed</td>
+                        <td>String</td>
+                        <td>ORM : Whether the discriminator column is to be indexed</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definitions used for storing the discriminator</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Inheritance(strategy=InheritanceStrategy.NEW_TABLE)
+@Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME)
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="DatastoreIdentity"/>
+            <subsection name="@DatastoreIdentity">
+                <p>
+                    Annotation used to define the identity when using datastore-identity for the class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>strategy</td>
+                        <td>IdGeneratorStrategy</td>
+                        <td>The inheritance strategy (NATIVE, SEQUENCE, IDENTITY, INCREMENT, UUIDSTRING, UUIDHEX)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>customStrategy</td>
+                        <td>String</td>
+                        <td>Name of a custom id generation strategy (e.g "max", "auid"). 
+                            This overrides the value of "strategy"</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>sequence</td>
+                        <td>String</td>
+                        <td>Name of the sequence to use (when using SEQUENCE strategy) - refer to @Sequence</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for the datastore identity</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) for the datastore identity</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@DatastoreIdentity(strategy=IdGeneratorStrategy.INCREMENT)
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Version"/>
+            <subsection name="@Version">
+                <p>
+                    Annotation used to define the versioning details for use with optimistic transactions.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>strategy</td>
+                        <td>VersionStrategy</td>
+                        <td>The version strategy (NONE, STATE_IMAGE, DATE_TIME, VERSION_NUMBER)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>indexed</td>
+                        <td>String</td>
+                        <td>Whether the version column(s) is indexed</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for the version</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) for the version</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Version(strategy=VersionStrategy.VERSION_NUMBER)
+public class MyClass
+{
+    ...
+}</source>
+                <p>See the documentation for <a href="transactions.html">transactions</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="PrimaryKey_Class"/>
+            <subsection name="@PrimaryKey">
+                <p>
+                    Annotation used to define the primary key constraint for a class.
+                    Maps across to the &lt;primary-key&gt; MetaData element. Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>ORM : Name of the primary key constraint</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for this key</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) of this key</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@PrimaryKey(name="MYCLASS_PK")
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="FetchPlans"/>
+            <subsection name="@FetchPlans">
+                <p>
+                    Annotation used to define a set of fetch plans.
+                    Specified on the <b>class</b>. Used by named queries
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#FetchPlan">FetchPlan</a>[]</td>
+                        <td>Array of fetch plans - see @FetchPlan annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@FetchPlans({@FetchPlan(name="plan_3", maxFetchDepth=3, fetchGroups={"group1", "group4"}),
+             @FetchPlan(name="plan_4", maxFetchDepth=2, fetchGroups={"group1", "group2"})})
+public class MyClass
+{
+    ...
+}</source>
+                <p>See the documentation for <a href="fetchgroups.html">FetchGroups</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="FetchPlan"/>
+            <subsection name="@FetchPlan">
+                <p>
+                    Annotation used to define a fetch plan
+                    Is equivalent to the &lt;fetch-plan&gt; metadata element.
+                    Specified on the <b>class</b>. Used by named queries
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>Name of the FetchPlan</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>maxFetchDepth</td>
+                        <td>int</td>
+                        <td>Maximum fetch depth</td>
+                        <td>1</td>
+                    </tr>
+                    <tr>
+                        <td>fetchSize</td>
+                        <td>int</td>
+                        <td>Size hint for fetching query result sets</td>
+                        <td>0</td>
+                    </tr>
+                    <tr>
+                        <td>fetchGroups</td>
+                        <td>String[]</td>
+                        <td>Names of the fetch groups included in this FetchPlan.</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@FetchPlan(name="plan_3", maxFetchDepth=3, fetchGroups={"group1", "group4"})
+public class MyClass
+{
+    ...
+}</source>
+                <p>See the documentation for <a href="fetchgroups.html">FetchGroups</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="FetchGroups"/>
+            <subsection name="@FetchGroups">
+                <p>
+                    Annotation used to define a set of fetch groups for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#FetchGroup">FetchGroup</a>[]</td>
+                        <td>Array of fetch groups - see @FetchGroup annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@FetchGroups({@FetchGroup(name="one_two", members={@Persistent(name="field1"), @Persistent(name="field2")}),
+              @FetchGroup(name="three", members={@Persistent(name="field3")})})
+public class MyClass
+{
+    @Persistent
+    String field1;
+
+    @Persistent
+    String field2;
+
+    @Persistent
+    String field3;
+    ...
+}</source>
+                <p>See the documentation for <a href="fetchgroups.html">FetchGroups</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="FetchGroup"/>
+            <subsection name="@FetchGroup">
+                <p>
+                    Annotation used to define a fetch group.
+                    Is equivalent to the &lt;fetch-group&gt; metadata element.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>Name of the fetch group</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>postLoad</td>
+                        <td>String</td>
+                        <td>Whether to call jdoPostLoad after loading this fetch group</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>members</td>
+                        <td><a href="#Persistent">Persistent</a>[]</td>
+                        <td>Definitions of the fields/properties to include in this fetch group</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@FetchGroup(name="one_two", members={@Persistent(name="field1"), @Persistent(name="field2")})
+public class MyClass
+{
+    @Persistent
+    String field1;
+
+    @Persistent
+    String field2;
+    ...
+}</source>
+                <p>See the documentation for <a href="fetchgroups.html">FetchGroups</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Sequence"/>
+            <subsection name="@Sequence">
+                <p>
+                    Annotation used to define a sequence generator.
+                    Is equivalent to the &lt;sequence&gt; metadata element.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>Name of the sequence</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>strategy</td>
+                        <td>SequenceStrategy</td>
+                        <td>Strategy for the sequence (NONTRANSACTIONAL, CONTIGUOUS, NONCONTIGUOUS)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>datastoreSequence</td>
+                        <td>String</td>
+                        <td>Name of a datastore sequence that this maps to</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>factoryClass</td>
+                        <td>Class</td>
+                        <td>Factory class to use to generate the sequence</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>initialValue</td>
+                        <td>int</td>
+                        <td>Initial value of the sequence</td>
+                        <td>1</td>
+                    </tr>
+                    <tr>
+                        <td>allocationSize</td>
+                        <td>int</td>
+                        <td>Allocation size of the sequence</td>
+                        <td>50</td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Queries"/>
+            <subsection name="@Queries">
+                <p>
+                    Annotation used to define a set of named queries for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#Query">Query</a>[]</td>
+                        <td>Array of queries - see @Query annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Queries({@Query(name="PeopleCalledSmith", language="JDOQL", 
+                 value="SELECT FROM mydomain.Person WHERE surname == \"Smith\""),
+          @Query(name="PeopleCalledJones", language="JDOQL", 
+                 value="SELECT FROM mydomain.Person WHERE surname == \"Jones\"")})
+public class Person
+{
+    @Persistent
+    String surname;
+
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Query"/>
+            <subsection name="@Query">
+                <p>
+                    Annotation used to define a named query.
+                    Is equivalent to the &lt;query&gt; metadata element.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>Name of the query</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td>String</td>
+                        <td>The query string itself</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>language</td>
+                        <td>String</td>
+                        <td>Language of the query (JDOQL, SQL, ...)</td>
+                        <td>JDOQL</td>
+                    </tr>
+                    <tr>
+                        <td>unmodifiable</td>
+                        <td>String</td>
+                        <td>Whether the query is not modifiable at runtime</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>unique</td>
+                        <td>String</td>
+                        <td>Whether the query returns unique results (for SQL queries only)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>resultClass</td>
+                        <td>Class</td>
+                        <td>Result class to use (for SQL queries only)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>fetchPlan</td>
+                        <td>String</td>
+                        <td>Name of a named FetchPlan to use with this query</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Query(name="PeopleCalledSmith", language="JDOQL", 
+       value="SELECT FROM mydomain.Person WHERE surname == \"Smith\"")
+public class Person
+{
+    @Persistent
+    String surname;
+
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Indices"/>
+            <subsection name="@Indices">
+                <p>
+                    Annotation used to define a set of indices for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#Index_Class">Index</a>[]</td>
+                        <td>Array of indices - see @Index annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Indices({@Index(name="MYINDEX_1", members={"field1","field2"}), @Index(name="MYINDEX_2", members={"field3"})})
+public class Person
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Index_Class"/>
+            <subsection name="@Index">
+                <p>
+                    Annotation used to define an index for the class as a whole typically being a composite index across
+                    multiple columns or fields/properties. 
+                    Is equivalent to the &lt;index&gt; metadata element when specified under class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>ORM : Name of the index</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table for the index</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>unique</td>
+                        <td>String</td>
+                        <td>ORM : Whether the index is unique</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>members</td>
+                        <td>String[]</td>
+                        <td>ORM : Names of the fields/properties that make up this index</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Columns that make up this index</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Index(name="MY_COMPOSITE_IDX", members={"field1", "field2"})
+public class MyClass
+{
+    @Persistent
+    String field1;
+
+    @Persistent
+    String field2;
+
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Uniques"/>
+            <subsection name="@Uniques">
+                <p>
+                    Annotation used to define a set of unique constraints for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#Unique_Class">Unique</a>[]</td>
+                        <td>Array of constraints - see @Unique annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Uniques({@Unique(name="MYCONST_1", members={"field1","field2"}), @Unique(name="MYCONST_2", members={"field3"})})
+public class Person
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Unique_Class"/>
+            <subsection name="@Unique">
+                <p>
+                    Annotation used to define a unique constraints for the class as a whole typically being a composite constraint across
+                    multiple columns or fields/properties. 
+                    Is equivalent to the &lt;unique&gt; metadata element when specified under class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>ORM : Name of the constraint</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table for the constraint</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deferred</td>
+                        <td>String</td>
+                        <td>ORM : Whether the constraint is deferred</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>members</td>
+                        <td>String[]</td>
+                        <td>ORM : Names of the fields/properties that make up this constraint</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Columns that make up this constraint</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Unique(name="MY_COMPOSITE_IDX", members={"field1", "field2"})
+public class MyClass
+{
+    @Persistent
+    String field1;
+
+    @Persistent
+    String field2;
+
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="ForeignKeys"/>
+            <subsection name="@ForeignKeys">
+                <p>
+                    Annotation used to define a set of foreign-key constraints for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#ForeignKey_Class">ForeignKey</a>[]</td>
+                        <td>Array of FK constraints - see @ForeignKey annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="ForeignKey_Class"/>
+            <subsection name="@ForeignKey">
+                <p>
+                    Annotation used to define a foreign-key constraint for the class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>ORM : Name of the constraint</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table that the FK is to</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deferred</td>
+                        <td>String</td>
+                        <td>ORM : Whether the constraint is deferred</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>unique</td>
+                        <td>String</td>
+                        <td>ORM : Whether the constraint is unique</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deleteAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to apply to the FK to be used on deleting</td>
+                        <td>ForeignKeyAction.RESTRICT</td>
+                    </tr>
+                    <tr>
+                        <td>updateAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to apply to the FK to be used on updating</td>
+                        <td>ForeignKeyAction.RESTRICT</td>
+                    </tr>
+                    <tr>
+                        <td>members</td>
+                        <td>String[]</td>
+                        <td>ORM : Names of the fields/properties that compose this FK.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Columns that compose this FK.</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Joins"/>
+            <subsection name="@Joins">
+                <p>
+                    Annotation used to define a set of joins (to secondary tables) for a class.
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#Join_Class">Join</a>[]</td>
+                        <td>Array of joins - see @Join annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Joins({@Join(table="MY_OTHER_TABLE", column="MY_PK_COL"),
+        @Join(table="MY_SECOND_TABLE", column="MY_PK_COL")})
+public class MyClass
+{
+    @Persistent(table="MY_OTHER_TABLE")
+    String myField;
+
+    @Persistent(table="MY_SECOND_TABLE")
+    String myField2;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Join_Class"/>
+            <subsection name="@Join">
+                <p>
+                    Annotation used to specify a join for a secondary table. Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Table name used when joining the PK of a FCO class table to a secondary table.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column used to join to the PK of the primary table (when only one column used)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>outer</td>
+                        <td>String</td>
+                        <td>ORM : Whether to use an outer join when retrieving fields/properties stored in the secondary table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Name of the colums used to join to the PK of the primary table (when multiple columns used)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable(name="MYTABLE")
+@Join(table="MY_OTHER_TABLE", column="MY_PK_COL")
+public class MyClass
+{
+    @Persistent(name="MY_OTHER_TABLE")
+    String myField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Columns_Class"/>
+            <subsection name="@Columns">
+                <p>
+                    Annotation used to define the columns which have no associated field in the class.
+                    User should specify a minimum of @Column "name", "jdbcType", and "insertValue".
+                    Specified on the <b>class</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>Array of columns - see @Column annotation</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+@Columns(@Column(name="MY_OTHER_COL", jdbcType="VARCHAR", insertValue="N/A")
+public class MyClass
+{
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Persistent"/>
+            <subsection name="@Persistent">
+                <p>
+                    Annotation used to define the fields/properties to be persisted.
+                    Is equivalent to the &lt;field&gt; and &lt;property&gt; metadata elements.
+                    Specified on the <b>field/method</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>persistenceModifier</td>
+                        <td>PersistenceModifier</td>
+                        <td>Whether the field is persistent (PERSISTENT, TRANSACTIONAL, NONE)</td>
+                        <td>[depends on field type]</td>
+                    </tr>
+                    <tr>
+                        <td>defaultFetchGroup</td>
+                        <td>String</td>
+                        <td>Whether the field is part of the DFG</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>nullValue</td>
+                        <td>NullValue</td>
+                        <td>Required behaviour when inserting a null value for this field (NONE, EXCEPTION, DEFAULT).</td>
+                        <td>NONE</td>
+                    </tr>
+                    <tr>
+                        <td>embedded</td>
+                        <td>String</td>
+                        <td>Whether this field as a whole is embedded. Use @Embedded to specify details.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedElement</td>
+                        <td>String</td>
+                        <td>Whether the element stored in this collection/array field/property is embedded</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedKey</td>
+                        <td>String</td>
+                        <td>Whether the key stored in this map field/property is embedded</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedValue</td>
+                        <td>String</td>
+                        <td>Whether the value stored in this map field/property is embedded</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serialized</td>
+                        <td>String</td>
+                        <td>Whether this field/property as a whole is serialised</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serializedElement</td>
+                        <td>String</td>
+                        <td>Whether the element stored in this collection/array field/property is serialised</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serializedKey</td>
+                        <td>String</td>
+                        <td>Whether the key stored in this map field/property is serialised</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serializedValue</td>
+                        <td>String</td>
+                        <td>Whether the value stored in this map field/property is serialised</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependent</td>
+                        <td>String</td>
+                        <td>Whether this field is dependent, deleting the related object when deleting this object</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependentElement</td>
+                        <td>String</td>
+                        <td>Whether the element stored in this field/property is dependent</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependentKey</td>
+                        <td>String</td>
+                        <td>Whether the key stored in this field/property is dependent</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependentValue</td>
+                        <td>String</td>
+                        <td>Whether the value stored in this field/property is dependent</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>primaryKey</td>
+                        <td>String</td>
+                        <td>Whether this field is (part of) the primary key</td>
+                        <td>false</td>
+                    </tr>
+                    <tr>
+                        <td>valueStrategy</td>
+                        <td>IdGeneratorStrategy</td>
+                        <td>Strategy to use when generating values for the field (NATIVE, SEQUENCE, IDENTITY, INCREMENT, UUIDSTRING, UUIDHEX)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>customValueStrategy</td>
+                        <td>String</td>
+                        <td>Name of a custom id generation strategy (e.g "max", "auid"). 
+                            This overrides the value of "valueStrategy"</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>sequence</td>
+                        <td>String</td>
+                        <td>Name of the sequence when using valueStrategy of SEQUENCE - refer to @Sequence</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>types</td>
+                        <td>Class[]</td>
+                        <td>Type(s) of field (when using interfaces/reference types).</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>mappedBy</td>
+                        <td>String</td>
+                        <td>Field in other class when the relation is bidirectional to signify the owner of the relation</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table where this field is persisted.
+                            If this field is a collection/map/array then the table refers to a join table,
+                            otherwise this refers to a secondary table.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>name</td>
+                        <td>String</td>
+                        <td>Name of the field when defining an embedded field.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition(s) for the columns into which this field is persisted. This is
+                        only typically used when specifying columns of a field of an embedded class.</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>cacheable</td>
+                        <td>String</td>
+                        <td>Whether the field/property can be L2 cached. <b>From JDO2.2</b></td>
+                        <td><b>true</b> | false</td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>recursionDepth</td>
+                        <td>int</td>
+                        <td>Recursion depth for this field when fetching.
+                            <b>Only applicable when specified within @FetchGroup</b></td>
+                        <td>1</td>
+                    </tr>
+                    <tr>
+                        <td>loadFetchGroup</td>
+                        <td>String</td>
+                        <td>Name of a fetch group to activate when a load of this field is initiated (due to it 
+                            being currently unloaded). Not used for getObjectById, queries, extents etc.
+                            Better to use @FetchGroup and define your groups</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Persistent(primaryKey="true")
+    String myField;
+    ...
+}</source>
+                <p>See the documentation for <a href="field_types.html">Field Types</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Serialized"/>
+            <subsection name="@Serialized">
+                <p>
+                    This annotation is a shortcut for @Persistent(serialized="true") meaning that the field is stored 
+                    serialized. It has no attributes. Specified on the <b>field/method</b>.
+                </p>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Serialized
+    Object myField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="NotPersistent"/>
+            <subsection name="@NotPersistent">
+                <p>
+                    This annotation is a shortcut for @Persistent(persistenceModifier=PersistenceModifier.NONE) meaning that the 
+                    field/property is not persisted. It has no attributes. Specified on the <b>field/method</b>.
+                </p>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @NotPersistent
+    String myOtherField;
+    ...
+}</source>
+                <p>See the documentation for <a href="field_types.html">Field Types</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Transactional"/>
+            <subsection name="@Transactional">
+                <p>
+                    This annotation is a shortcut for @Persistent(persistenceModifier=PersistenceModifier.TRANSACTIONAL) meaning that the 
+                    field/property is not persisted yet managed. It has no attributes. Specified on the <b>field/method</b>.
+                </p>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Transactional
+    String myOtherField;
+    ...
+}</source>
+                <p>See the documentation for <a href="field_types.html">Field Types</a></p>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Cacheable"/>
+            <subsection name="@Cacheable">
+                <p>
+                    This annotation is a shortcut for @Persistent(cacheable={value}) specifying whether
+                    the field/property can be cached in a Level 2 cache.
+                    Specified on the <b>field/property</b>. The default
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>value</td>
+                        <td>String</td>
+                        <td>Whether the field/property is cacheable</td>
+                        <td><b>true</b> | false</td>
+                    </tr>
+                </table>
+                <source>
+public class MyClass
+{
+    @Cacheable("false")
+    Collection elements;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="PrimaryKey"/>
+            <subsection name="@PrimaryKey">
+                <p>
+                    This annotation is a shortcut for @Persistent(primaryKey="true") meaning that the field/property is 
+                    part of the primary key for the class. 
+                    No attributes are needed when specified like this. Specified on the <b>field/method</b>.
+                </p>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @PrimaryKey
+    String myOtherField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Element"/>
+            <subsection name="@Element">
+                <p>
+                    Annotation used to define the element for any collection/array to be persisted.
+                    Maps across to the &lt;collection&gt;, &lt;array&gt; and &lt;element&gt; MetaData elements.
+                    Specified on the <b>field/method</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>types</td>
+                        <td>Class[]</td>
+                        <td>Type(s) of element</td>
+                        <td>When using an array is not needed. When using a collection will be taken from the collection definition if using 
+                            generics, otherwise must be specified.</td>
+                    </tr>
+                    <tr>
+                        <td>embedded</td>
+                        <td>String</td>
+                        <td>Whether the element is embedded into a join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serialized</td>
+                        <td>String</td>
+                        <td>Whether the element is serialised into the join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependent</td>
+                        <td>String</td>
+                        <td>Whether the element objects are dependent when deleting the owner collection/array</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>mappedBy</td>
+                        <td>String</td>
+                        <td>Field in the element class that represents this object (when the relation is bidirectional)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedMapping</td>
+                        <td><a href="#Embedded">Embedded</a>[]</td>
+                        <td>Definition of any embedding of the (persistable) element. Only 1 "Embedded" should be provided</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table for this element</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for this element</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>foreignKey</td>
+                        <td>String</td>
+                        <td>ORM : Name of any foreign-key constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>generateForeignKey</td>
+                        <td>String</td>
+                        <td>ORM : Whether to generate a FK constraint for the element (when not specifying the name)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deleteAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to be applied to the foreign key for this element for action upon deletion</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>updateAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to be applied to the foreign key for this element for action upon update</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>index</td>
+                        <td>String</td>
+                        <td>ORM : Name of any index constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>indexed</td>
+                        <td>String</td>
+                        <td>ORM : Whether this element column is indexed</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>unique</td>
+                        <td>String</td>
+                        <td>ORM : Whether this element column is unique</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>uniqueKey</td>
+                        <td>String</td>
+                        <td>ORM : Name of any unique key constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) of this element</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Element(types=mydomain.MyElementClass.class, dependent="true")
+    Collection myField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Order"/>
+            <subsection name="@Order">
+                <p>
+                    Annotation used to define the ordering of an order-based Collection/array to be persisted.
+                    Maps across to the &lt;order&gt; MetaData element.
+                    Specified on the <b>field/method</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>mappedBy</td>
+                        <td>String</td>
+                        <td>ORM : Field in the element class that represents the ordering of the collection/array</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for this order</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) of this order</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Element(types=mydomain.MyElementClass.class, dependent="true")
+    @Order(column="ORDER_IDX")
+    Collection myField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Key"/>
+            <subsection name="@Key">
+                <p>
+                    Annotation used to define the key for any map to be persisted.
+                    Maps across to the &lt;map&gt; and &lt;key&gt; MetaData elements.
+                    Specified on the <b>field/method</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>types</td>
+                        <td>Class[]</td>
+                        <td>Type(s) of key.</td>
+                        <td>When using generics will be taken from the Map definition, otherwise must be specified</td>
+                    </tr>
+                    <tr>
+                        <td>embedded</td>
+                        <td>String</td>
+                        <td>Whether the key is embedded into a join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serialized</td>
+                        <td>String</td>
+                        <td>Whether the key is serialised into the join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependent</td>
+                        <td>String</td>
+                        <td>Whether the key objects are dependent when deleting the owner map</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>mappedBy</td>
+                        <td>String</td>
+                        <td>Used to specify the field in the value class where the key is stored (optional).</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedMapping</td>
+                        <td><a href="#Embedded">Embedded</a>[]</td>
+                        <td>Definition of any embedding of the (persistable) key. Only 1 "Embedded" should be provided</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table for this key</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for this key</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>foreignKey</td>
+                        <td>String</td>
+                        <td>ORM : Name of any foreign-key constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>generateForeignKey</td>
+                        <td>String</td>
+                        <td>ORM : Whether to generate a FK constraint for the key (when not specifying the name)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deleteAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to be applied to the foreign key for this key for action upon deletion</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>updateAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to be applied to the foreign key for this key for action upon update</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>index</td>
+                        <td>String</td>
+                        <td>ORM : Name of any index constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>indexed</td>
+                        <td>String</td>
+                        <td>ORM : Whether this key column is indexed</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>uniqueKey</td>
+                        <td>String</td>
+                        <td>ORM : Name of any unique key constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>unique</td>
+                        <td>String</td>
+                        <td>ORM : Whether this key column is unique</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>columns</td>
+                        <td><a href="#Column">Column</a>[]</td>
+                        <td>ORM : Column definition for the column(s) of this key</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>extensions</td>
+                        <td><a href="#Extension">Extension</a>[]</td>
+                        <td>Vendor extensions</td>
+                        <td></td>
+                    </tr>
+                </table>
+                <source>
+@PersistenceCapable
+public class MyClass
+{
+    @Key(types=java.lang.String.class)
+    Map myField;
+    ...
+}</source>
+                <br/>
+                <br/>
+            </subsection>
+
+            <a name="Value"/>
+            <subsection name="@Value">
+                <p>
+                    Annotation used to define the value for any map to be persisted.
+                    Maps across to the &lt;map&gt; and &lt;value&gt; MetaData elements.
+                    Specified on the <b>field/method</b>.
+                </p>
+                <table>
+                    <tr>
+                        <th>Attribute</th>
+                        <th>Type</th>
+                        <th>Description</th>
+                        <th>Default</th>
+                    </tr>
+                    <tr>
+                        <td>types</td>
+                        <td>Class[]</td>
+                        <td>Type(s) of value.</td>
+                        <td>When using generics will be taken from the Map definition, otherwise must be specified</td>
+                    </tr>
+                    <tr>
+                        <td>embedded</td>
+                        <td>String</td>
+                        <td>Whether the value is embedded into a join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>serialized</td>
+                        <td>String</td>
+                        <td>Whether the value is serialised into the join table</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>dependent</td>
+                        <td>String</td>
+                        <td>Whether the value objects are dependent when deleting the owner map</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>mappedBy</td>
+                        <td>String</td>
+                        <td>Used to specify the field in the key class where the value is stored (optional).</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>embeddedMapping</td>
+                        <td><a href="#Embedded">Embedded</a>[]</td>
+                        <td>Definition of any embedding of the (persistable) value. Only 1 "Embedded" should be provided</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>table</td>
+                        <td>String</td>
+                        <td>ORM : Name of the table for this value</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>column</td>
+                        <td>String</td>
+                        <td>ORM : Name of the column for this value</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>foreignKey</td>
+                        <td>String</td>
+                        <td>ORM : Name of any foreign-key constraint to add</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>deleteAction</td>
+                        <td>ForeignKeyAction</td>
+                        <td>ORM : Action to be applied to the foreign key for this value for action upon deletion</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>generateForeignKey</td>
+                        <td>String</td>
+                        <td>ORM : Whether to generate a FK constraint for the value (when not specifying the name)</td>
+                        <td></td>
+                    </tr>
+                    <tr>
+                        <td>updateAction</td>
+                        <td>ForeignKeyAction</td>

[... 580 lines stripped ...]