This section describes OpenJPA's core additions to standard entity metadata. We present the object-relational mapping syntax to support these additions in Section 7, “ Additional JPA Mappings ”. Finally, Section 4, “ Metadata Extensions ” covers additional extensions to JPA metadata that allow you to access auxiliary OpenJPA features.
JPA typically requires you to declare one or more Id fields
to act as primary keys. OpenJPA, however, can create and maintain a surrogate
primary key value when you do not declare any Id fields. This
form of persistent identity is called datastore identity.
Section 4, “
            Object Identity
        ” discusses OpenJPA's support for
datastore identity in JPA. We cover how to map your datastore identity primary
key column in Section 7.1, “
                Datastore Identity Mapping
            ”
            
Just as OpenJPA can maintain your entity's identity without any Id
 fields, OpenJPA can maintain your entity's optimistic version without
any Version fields.
Section 7.2, “
                Surrogate Version Mapping
            ” shows you how to map
surrogate version columns.
            
JPA defines Basic, Lob, Embedded
, ManyToOne, and OneToOne
persistence strategies for direct field values. OpenJPA supports all of these
standard strategies, but adds one of its own: Persistent.
The 
org.apache.openjpa.persistence.Persistent
metadata annotation can represent any direct field value, including custom
types. It has the following properties:
            
FetchType fetch: Whether to load the field eagerly or
lazily. Corresponds exactly to the same-named property of standard JPA
annotations such as  Basic
. Defaults to FetchType.EAGER.
                    
CascadeType[] cascade: Array of enum values defining cascade
behavior for this field. Corresponds exactly to the same-named property of
standard JPA annotations such as 
 ManyToOne. Defaults to empty array.
                    
String mappedBy: Names the field in the related entity that
maps this bidirectional relation. Corresponds to the same-named property of
standard JPA annotations such as 
 OneToOne.
                    
boolean optional: Whether the value can be null. Corresponds
to the same-named property of standard JPA annotations such as
 ManyToOne
, but can apply to non-entity object values as well. Defaults to
true.
                    
boolean embedded: Set this property to true
 if the field value is stored as an embedded object.
                    
Though you can use the Persistent annotation in place of
most of the standard direct field annotations mentioned above, we recommend
primarily using it for non-standard and custom types for which no standard JPA
annotation exists. For example, Section 7.3, “
                Multi-Column Mappings
            ”
 demonstrates the use of the Persistent annotation
to denote a persistent java.awt.Point field.
            
JPA standardizes support for collections of entities with the 
OneToMany and ManyToMany persistence strategies.  
OpenJPA supports these strategies, and may be extended for other strategies as 
well.  For extended strategies, use the 
org.apache.openjpa.persistence.PersistentCollection metadata 
annotation to represents any persistent collection field.  It has the following
properties:
			
Class elementType: The class of the collection elements.  
This information is usually taken from the parameterized collection element 
type.  You must supply it explicitly, however, if your field isn't a 
parameterized type.
					
FetchType fetch: Whether to load the collection eagerly or 
lazily.  Corresponds exactly to the same-named property of standard JPA 
annotations such as 
Basic. Defaults to FetchType.LAZY.
					
String mappedBy: Names the field in the related entity that 
maps this bidirectional relation.  Corresponds to the same-named property of 
standard JPA annotations such as 
ManyToMany.
					
CascadeType[] elementCascade: Array of enum values defining 
cascade behavior for the collection elements.  Corresponds exactly to the 
cascade property of standard JPA annotations such as 
ManyToMany. Defaults to empty array.
					
boolean elementEmbedded: Set this property to true
 if the elements are stored as embedded objects.
					
JPA has limited support for maps.  If you extend JPA's standard map support to 
encompass new mappings, use the 
org.apache.openjpa.persistence.PersistentMap metadata 
annotation to represent your custom persistent map fields.  It has the 
following properties:
			
Class keyType: The class of the map keys.  This information 
is usually taken from the parameterized map key type.  You must supply it 
explicitly, however, if your field isn't a parameterized type.
					
Class elementType: The class of the map values.  This 
information is usually taken from the parameterized map value type.  You must 
supply it explicitly, however, if your field isn't a parameterized type.
					
FetchType fetch: Whether to load the collection eagerly or 
lazily.  Corresponds exactly to the same-named property of standard JPA 
annotations such as 
Basic. Defaults to FetchType.LAZY.
					
CascadeType[] keyCascade: Array of enum values defining 
cascade behavior for the map keys.  Corresponds exactly to the cascade
 property of standard JPA annotations such as 
ManyToOne. Defaults to empty array.
					
CascadeType[] elementCascade: Array of enum values defining 
cascade behavior for the map values.  Corresponds exactly to the 
cascade property of standard JPA annotations such as 
ManyToOne. Defaults to empty array.
					
boolean keyEmbedded: Set this property to true
 if the map keys are stored as embedded objects.
					
boolean elementEmbedded: Set this property to 
true if the map values are stored as embedded objects.