blob: 18e972c0ee4bb4437759daa54df98148385b78ba [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
******************************************************************************
Copyright (c) 1998, 2008 Oracle. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
which accompanies this distribution.
The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
and the Eclipse Distribution License is available at
http://www.eclipse.org/org/documents/edl-v10.php.
Contributors:
Oracle - initial API and implementation from Oracle TopLink
*****************************************************************************/
-->
<!-- Eclipse Persistence Service Project :: Map Schema file for ORM/OXM/EIS -->
<xsd:schema
targetNamespace="http://www.eclipse.org/eclipselink/xsds/persistence"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.1"
>
<xsd:element name="object-persistence" type="object-persistence" />
<xsd:complexType name="object-persistence">
<xsd:annotation>
<xsd:documentation>An object-persistence mapping module, a set of class-mapping-descriptors.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>A name for the model being mapped.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="class-mapping-descriptors">
<xsd:annotation>
<xsd:documentation>The list of class mapping descriptors.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="class-mapping-descriptor" type="class-mapping-descriptor">
<xsd:annotation>
<xsd:documentation>Information of how a class is persisted to its data-store.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="login" type="datasource-login">
<xsd:annotation>
<xsd:documentation>The datasource connection and configuration information.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="default-temporal-mutable" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Defines the default for how Date and Calendar types are used with change tracking.</xsd:documentation>
<xsd:documentation>By default they are assumed not to be changed directly (only replaced).</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute default="Eclipse Persistence Services - 1.1 (Build YYMMDD)" name="version" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="datasource-login">
<xsd:annotation>
<xsd:documentation>The datasource connection and configuration information.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="platform-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the platform class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="user-name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The datasource user-name.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="password" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The datasource password, this is stored in encrypted form.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="external-connection-pooling" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Defines if the connections are managed by the datasource driver, and a new connection should be acquire per call.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="external-transaction-controller" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Defines if the transaction are managed by a transaction manager, and should not be managed by TopLink.</xsd:documentation>
<xsd:documentation>This can also be used if the datasource does not support transactions.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="sequencing">
<xsd:annotation>
<xsd:documentation>Sequencing information.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="default-sequence" type="sequence">
<xsd:annotation>
<xsd:documentation>Default sequence. The name is optional. If no name provided an empty string will be used as a name.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="sequences">
<xsd:annotation>
<xsd:documentation>Non default sequences. Make sure each sequence has unique name.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="sequence" type="sequence" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="database-login">
<xsd:annotation>
<xsd:documentation>The JDBC driver and database connection and configuration information.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="datasource-login">
<xsd:sequence>
<xsd:element minOccurs="0" name="driver-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the JDBC driver class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="connection-url" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The full JDBC driver connection URL.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="bind-all-parameters" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if parameter binding should be used.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="cache-all-statements" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if statement caching should be used. This should be used with parameter binding, this cannot be used with external connection pooling.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="byte-array-binding" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if byte array data-types should use binding.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="string-binding" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if string data-types should use binding.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="256" name="string-binding-size" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Configure the threshold string size for usage of string binding.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="streams-for-binding" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if large byte array and string data-types should be bound as streams.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="force-field-names-to-upper-case" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure to force all field names to upper-case.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="optimize-data-conversion" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure data optimization.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="trim-strings" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if string trailing blanks should be trimmed. This is normally required for CHAR data-types.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-writing" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Configure if batch writing should be used.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="jdbc-batch-writing" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>If using batch writing, configure if the JDBC drivers batch writing should be used.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="eis-login">
<xsd:annotation>
<xsd:documentation>The JCA driver and EIS connection and configuration information.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="datasource-login">
<xsd:sequence>
<xsd:element minOccurs="0" name="connection-spec-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the TopLink platform specific connection spec class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="connection-factory-url" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The JNDI url for the managed JCA adapter's connection factory.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="xml-login">
<xsd:annotation>
<xsd:documentation>The connection and configuration information.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="datasource-login">
<xsd:sequence>
<xsd:element minOccurs="0" default="true"
name="equal-namespace-resolvers" type="xsd:boolean" />
<xsd:element name="document-preservation-policy"
type="document-preservation-policy" maxOccurs="1"
minOccurs="0">
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="class-mapping-descriptor">
<xsd:annotation>
<xsd:documentation>Information of how a class is persisted to its data-store.</xsd:documentation>
<xsd:documentation>This is an abstract definition to allow flexibility in the types of classes and datastores persisted, i.e. interfaces, abstract classes, aggregates, non-relational persistence.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the implementation class being persisted. The class name must be full qualified with its package.</xsd:documentation>
<xsd:documentation>Example: <class xmlns="http://www.eclipse.org/eclipselink/xsds/persistence">example.employee.implementation.Employee</class></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="alias" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Optionally an alias name can be given for the class. The alias is a string that can be used to refer to the class in place of its implementation name, such as in querying.</xsd:documentation>
<xsd:documentation>Example: <alias xmlns="http://www.eclipse.org/eclipselink/xsds/persistence">Employee</alias></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="primary-key">
<xsd:annotation>
<xsd:documentation>The list of fields/columns that make up the primary key or unique identifier of the class.</xsd:documentation>
<xsd:documentation>This is used for caching, relationships, and for database operations.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="field" type="field">
<xsd:annotation>
<xsd:documentation>The primary key field.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="read-only" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Defines if the class is read-only.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="properties">
<xsd:annotation>
<xsd:documentation>Allow for user defined properties to be defined.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="property" type="property">
<xsd:annotation>
<xsd:documentation>A user defined property.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="inheritance" type="inheritance-policy">
<xsd:annotation>
<xsd:documentation>Defines how the class is related in inheritance and how this inheritance is persisted.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="events" type="event-policy">
<xsd:annotation>
<xsd:documentation>Defines the persistent events for this class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="querying" type="query-policy">
<xsd:annotation>
<xsd:documentation>The list of defined queries for the class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="attribute-mappings">
<xsd:annotation>
<xsd:documentation>The list of mappings that define how the class' attributes are persisted.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="attribute-mapping" type="attribute-mapping">
<xsd:annotation>
<xsd:documentation>Defines how a attribute is persisted. The attribute mapping definition is extendable to allow for different types of mappings.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="descriptor-type" type="class-descriptor-type">
<xsd:annotation>
<xsd:documentation>Defines the descriptor type, such as aggregate or independent.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="interfaces" type="interface-policy">
<xsd:annotation>
<xsd:documentation>Defines the interfaces that this class implements..</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="locking" type="locking-policy">
<xsd:annotation>
<xsd:documentation>Defines the locking behavior for the class. Such as an optimistic locking policy based on version, timestamp or change set of columns.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="sequencing" type="sequencing-policy">
<xsd:annotation>
<xsd:documentation>Defines how a generated unique id should be assigned to the class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="caching" type="caching-policy">
<xsd:annotation>
<xsd:documentation>Defines how the class' instances should be cached.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="remote-caching" type="caching-policy">
<xsd:annotation>
<xsd:documentation>Defines how the class' instances should be cached on remote clients.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="history-policy" type="history-policy">
<xsd:annotation>
<xsd:documentation>Defines how past versions of objects are persisted to the data-store. By default there will be no history policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="returning-policy" type="returning-policy">
<xsd:annotation>
<xsd:documentation>Defines retuning policy. By default there will be no returning policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="amendment" type="amendment">
<xsd:annotation>
<xsd:documentation>Allow for the descriptor to be amended or customized through a class API after loading.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="instantiation" type="instantiation-policy">
<xsd:annotation>
<xsd:documentation>Allow the object instantiation behavoir to be customized</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="copying" type="copy-policy">
<xsd:annotation>
<xsd:documentation>Allow the object cloning/copying behavoir to be customized.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="query-keys">
<xsd:annotation>
<xsd:documentation>A list of query keys or aliases for database information. These can be used in queries instead of the database column names.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="query-key" type="query-key">
<xsd:annotation>
<xsd:documentation>Defines an alias for querying database information.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="cmp-policy" type="cmp-policy">
<xsd:annotation>
<xsd:documentation>Place holder of CMP information specific.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="fetch-groups" type="fetch-groups">
<xsd:annotation>
<xsd:documentation>Contains all pre-defined fetch groups at the descriptor level</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" maxOccurs="1" name="change-policy" type="change-policy">
<xsd:annotation>
<xsd:documentation>Contains the Change Policy for this descriptor</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute fixed="10" name="schema-major-version" type="xsd:integer" />
<xsd:attribute fixed="0" name="schema-minor-version" type="xsd:integer" />
</xsd:complexType>
<xsd:simpleType name="class-descriptor-type">
<xsd:annotation>
<xsd:documentation>Defines the class descriptor type.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="independent" />
<xsd:enumeration value="aggregate" />
<xsd:enumeration value="aggregate-collection" />
<xsd:enumeration value="composite" />
<xsd:enumeration value="composite" />
<xsd:enumeration value="interface" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="interface-policy">
<xsd:annotation>
<xsd:documentation>Specify the interfaces that a class descriptor implements, or the implemention class for an interface descriptor.</xsd:documentation>
<xsd:documentation>Optionally a set of public interfaces for the class can be specified. This allows the interface to be used to refer to the implementation class.</xsd:documentation>
<xsd:documentation>If two classes implement the same interface, an interface descriptor should be defined for the interface.</xsd:documentation>
<xsd:documentation>This can also be used to define inheritance between interface descriptors.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="interface" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified interface class name.</xsd:documentation>
<xsd:documentation>Example: <class xmlns="http://www.eclipse.org/eclipselink/xsds/persistence">example.employee.api.Employee</class></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="implementor-descriptor" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified class name of the implementation class for which this interface is the public interface.</xsd:documentation>
<xsd:documentation>This can be used if the interface has only a single implementor.</xsd:documentation>
<xsd:documentation>Example: <class xmlns="http://www.eclipse.org/eclipselink/xsds/persistence">example.employee.impl.Employee</class></xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="copy-policy">
<xsd:annotation>
<xsd:documentation>Allow the object cloning/copying behavoir to be customized.</xsd:documentation>
</xsd:annotation>
</xsd:complexType>
<xsd:complexType name="instantiation-copy-policy">
<xsd:annotation>
<xsd:documentation>Creates a copying through creating a new instance to copy into.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="copy-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="clone-copy-policy">
<xsd:annotation>
<xsd:documentation>Allow the object cloning/copying behavoir to be customized through a clone method.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="copy-policy">
<xsd:sequence>
<xsd:element minOccurs="0" name="method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the clone method on the object, i.e. 'clone'</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="instantiation-policy">
<xsd:annotation>
<xsd:documentation>Allow the object instantiation behavoir to be customized.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the method on the factory to instantiate the object instance.'</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="factory-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified factory class name.'</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="factory-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the method to instantiate the factory class.'</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="amendment">
<xsd:annotation>
<xsd:documentation>Specifies a class and static method to be called to allow for the descriptor to be amended or customized through a class API after loading.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="amendment-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation> The fully qualified name of the amendment class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="amendment-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the static amendment method on the class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="relational-class-mapping-descriptor">
<xsd:annotation>
<xsd:documentation>Defines a class mapping to a relational database table(s).</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="class-mapping-descriptor">
<xsd:sequence>
<xsd:element minOccurs="0" name="tables">
<xsd:annotation>
<xsd:documentation>The list of the tables the class is persisted to. Typically a class is persisted to a single table, but multiple tables can be defined.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="table" type="table">
<xsd:annotation>
<xsd:documentation>The list of tables that the class is persisted to. This is typically a single table but can be multiple, or empty for inheritance or aggregated classes.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="foreign-keys-for-multiple-table" type="foreign-key">
<xsd:annotation>
<xsd:documentation>Allow the foreign key field references to be define for multiple table descriptors.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="multiple-table-join-criteria" type="criteria">
<xsd:annotation>
<xsd:documentation>For complex multiple table join conditions an expression may be provided instead of the table foreign key information.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy.</xsd:documentation>
</xsd:annotation>
</xsd:complexType>
<xsd:complexType name="version-locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy based on a numeric version field/column that tracks changes and the version to an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="locking-policy">
<xsd:sequence>
<xsd:element name="version-field" type="field">
<xsd:annotation>
<xsd:documentation>The name and optionally the table of the column that the attribute is stored into.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="store-version-in-cache" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the version value should be stored in the cache, or if it will be stored in the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="timestamp-locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy based on timestamp version column that tracks changes and the version to an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="version-locking-policy">
<xsd:sequence>
<xsd:element minOccurs="0" default="false" name="server-time" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the timestamp should be obtained locally or from the database server.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="all-fields-locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy based on comparing the original read values of all fields of the object with the current state of the values in the database.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="locking-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="changed-fields-locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy based on comparing the original read values of only the changed fields of the object with the current state of the values in the database.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="locking-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="selected-fields-locking-policy">
<xsd:annotation>
<xsd:documentation>Defines an optimistic locking policy based on comparing the original read values of a specified set of fields of the object with the current state of the values in the database.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="locking-policy">
<xsd:sequence>
<xsd:element name="fields">
<xsd:annotation>
<xsd:documentation>Specify the set of fields to compare on update and delete.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="field" type="field" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="sequencing-policy">
<xsd:annotation>
<xsd:documentation>Defines how a database generated unique id should be assigned to the class.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="sequence-name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify the name of the sequence generator. This could be the name of a sequence object, or a row value in a sequence table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="sequence-field" type="field">
<xsd:annotation>
<xsd:documentation>Specify the field/column that the generated sequence id is assigned to.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="cache-type">
<xsd:annotation>
<xsd:documentation>Defines the set of valid caching types.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="full" />
<xsd:enumeration value="cache" />
<xsd:enumeration value="weak-reference" />
<xsd:enumeration value="soft-reference" />
<xsd:enumeration value="soft-cache-weak-reference" />
<xsd:enumeration value="hard-cache-weak-reference" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="caching-policy">
<xsd:annotation>
<xsd:documentation>Defines how the class' instances should be cached and how object identity should be maintained.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" default="soft-cache-weak-reference" name="cache-type" type="cache-type">
<xsd:annotation>
<xsd:documentation>Specify the type of caching, such as LRU, weak reference or none.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="100" name="cache-size" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specify the initial or maximum size of the cache.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="always-refresh" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to always refresh cached objects on queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="only-refresh-cache-if-newer-version" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to refresh if the cached object is an older version.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="disable-cache-hits" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Disable obtaining cache hits on primary key queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="always-conform" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to always conform queries within a transaction.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="isolated" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if objects of this type should be isolated from the shared cache.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="isolate-new-data-after-transaction" name="unitofwork-isolation-level" type="unitofwork-isolation-level">
<xsd:annotation>
<xsd:documentation>Specify how the unit of work should be isolated to the session cache.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="cache-invalidation-policy" type="cache-invalidation">
<xsd:annotation>
<xsd:documentation>Defines the cache invalidation policy. By default there will be no cache invalidation policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="change-set" name="cache-sync-type" type="cache-sync-type">
<xsd:annotation>
<xsd:documentation>The type of cache synchronization to be used with this descripor.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="cache-invalidation" abstract="true">
<xsd:annotation>
<xsd:documentation>Abstract superclass for cache invalidation policies.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" default="false" name="update-read-time-on-update" type="xsd:boolean" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="no-expiry-cache-invalidation-policy">
<xsd:annotation>
<xsd:documentation>Cache invalidation policy where objects in the cache do not expire.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="cache-invalidation" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="time-to-live-cache-invalidation-policy">
<xsd:annotation>
<xsd:documentation>Cache invalidation policy where objects live a specific number of milliseconds after they are read.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="cache-invalidation">
<xsd:sequence>
<xsd:element name="time-to-live" type="xsd:long" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="daily-cache-invalidation-policy">
<xsd:annotation>
<xsd:documentation>Cache invalidation Policy where objects expire at a specific time every day</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="cache-invalidation">
<xsd:sequence>
<xsd:element name="expiry-time" type="xsd:dateTime" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="history-policy">
<xsd:annotation>
<xsd:documentation>Defines how past versions of objects are to be persisted to the data-store.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" default="true" name="handle-writes" type="xsd:boolean" />
<xsd:element minOccurs="0" default="false" name="use-database-time" type="xsd:boolean" />
<xsd:element minOccurs="0" name="history-tables">
<xsd:annotation>
<xsd:documentation>Defines the names of the mirroring historical tables.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="history-table" type="history-table" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="start-fields">
<xsd:annotation>
<xsd:documentation>Defines the start fields for each historical table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="start-field" type="field" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="end-fields">
<xsd:annotation>
<xsd:documentation>Defines the end fields for each historical table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="end-field" type="field" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="history-table">
<xsd:annotation>
<xsd:documentation>Each entry is a source (descriptor) to history table name association.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" default="" name="source" type="xsd:string" />
<xsd:element minOccurs="1" name="history" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="returning-policy">
<xsd:annotation>
<xsd:documentation>Defines retuning policy. By default there will be no returning policy.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="1" name="returning-field-infos">
<xsd:annotation>
<xsd:documentation>Lists the fields to be returned together with the flags defining returning options</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="returning-field-info" type="returning-field-info" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="returning-field-info">
<xsd:annotation>
<xsd:documentation>Field to be returned together with type and the flags defining returning options. At least one of insert, update should be true.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="reference-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the target referenced class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="field" type="field">
<xsd:annotation>
<xsd:documentation>The field to be returned.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="insert" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Indicates whether the field should be retuned after Insert.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="insert-mode-return-only" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>If insert==true, indicates whether the field should not be inserted (true). If insert==false - ignored.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="update" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Indicates whether the field should be retuned after Insert.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="inheritance-policy">
<xsd:annotation>
<xsd:documentation>Defines how the class is related in inheritance and how this inheritance is persisted.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="parent-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the parent/superclass of the class being persisted. The class name must be full qualified with its package.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="read-subclasses-on-queries" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Define if subclasses of the class should be returned on queries, or only the exact class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="all-subclasses-view" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Optionally specify the name of a view that joins all of the subclass' tables.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="use-class-name-as-indicator" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the fully qualified class name should be used as the class type indicator.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="class-extraction-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of a method on the class that takes the class' row as argument a computed that class type to be used to instantiate from the row.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="class-indicator-field" type="field">
<xsd:annotation>
<xsd:documentation>The name of the type field/column that the class type is stored into.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="class-indicator-mappings" type="class-indicator-mappings">
<xsd:annotation>
<xsd:documentation>The set of class indicator values and the subclasses they map to.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="class-extractor" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of a class that implements a class extractor interface.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="only-instances-criteria" type="criteria">
<xsd:annotation>
<xsd:documentation>The criteria that filters out all sibling and subclass instances on queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="all-subclasses-criteria" type="criteria">
<xsd:annotation>
<xsd:documentation>The criteria that filters out sibling instances on queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="outer-join-subclasses" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>For inheritance queries specify if all subclasses should be outer joined, instead of a query per subclass.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="qname-inheritance-policy">
<xsd:annotation>
<xsd:documentation>Extends inheritance policy. Allows for prefixed names to be resolved at runtime to find the approriate class</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="inheritance-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="class-indicator-mappings">
<xsd:annotation>
<xsd:documentation>The set of class indicator values and the subclasses they map to.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="class-indicator-mapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the class the type maps to.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="class-indicator" type="xsd:anySimpleType">
<xsd:annotation>
<xsd:documentation>The field value used to define the class type.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="event-policy">
<xsd:annotation>
<xsd:documentation>Defines the persistent events for this class.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="event-listeners">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="event-listener" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of an event listener class that implements the descriptor event listener interface.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="post-build-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after building the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="pre-write-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before writing the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-write-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after writing the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="pre-insert-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before inserting the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-insert-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after inserting the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="pre-update-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before updating the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-update-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after updating the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="pre-delete-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before deleting the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-delete-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after deleting the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="about-to-insert-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before inserting the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="about-to-update-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed before updating the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-clone-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after cloning the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-merge-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after merging the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="post-refresh-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Method executed after refreshing the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="query-policy">
<xsd:annotation>
<xsd:documentation>The list of defined queries and query properties for the class.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="queries">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="query" type="query">
<xsd:annotation>
<xsd:documentation>A query definition for the class' instances.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="timeout" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specifies a timeout to apply to all queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="check-cache" name="existence" type="existence-policy">
<xsd:annotation>
<xsd:documentation>Allow the behavoir used to determine if an insert or update should occur for an object to be customized.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="insert-query" type="insert-object-query">
<xsd:annotation>
<xsd:documentation>Custom insert query. This overide the default insert behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="update-query" type="update-object-query">
<xsd:annotation>
<xsd:documentation>Custom update query. This overide the default update behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-query" type="delete-object-query">
<xsd:annotation>
<xsd:documentation>Custom delete query. This overide the default delete behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="does-exist-query" type="does-exist-query">
<xsd:annotation>
<xsd:documentation>Custom does exist query. This overide the default delete behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="read-object-query" type="read-object-query">
<xsd:annotation>
<xsd:documentation>Custom read object query. This overide the default read behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="read-all-query" type="read-all-query">
<xsd:annotation>
<xsd:documentation>Custom read all query. This overide the default read all behavoir for usage with stored procedures or custom calls.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="existence-policy">
<xsd:annotation>
<xsd:documentation>Defines the set of valid existence policies for determining if an insert or update should occur for an object.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="check-cache" />
<xsd:enumeration value="check-database" />
<xsd:enumeration value="assume-existence" />
<xsd:enumeration value="assume-non-existence" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="query-key">
<xsd:annotation>
<xsd:documentation>Defines an alias for querying database information.</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The query-key alias name.</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:simpleType name="cache-sync-type">
<xsd:annotation>
<xsd:documentation>The type of cache synchronization to use with a descriptor.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="invalidation" />
<xsd:enumeration value="no-changes" />
<xsd:enumeration value="change-set-with-new-objects" />
<xsd:enumeration value="change-set" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="unitofwork-isolation-level">
<xsd:annotation>
<xsd:documentation>Specify how the unit of work isolated from the session cache.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="use-session-cache-after-transaction" />
<xsd:enumeration value="isolate-new-data-after-transaction" />
<xsd:enumeration value="isolate-cache-after-transaction" />
<xsd:enumeration value="isolate-cache-always" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="direct-query-key">
<xsd:annotation>
<xsd:documentation>Defines an alias for a database column.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="query-key">
<xsd:sequence>
<xsd:element name="field" type="field">
<xsd:annotation>
<xsd:documentation>The field/column being aliased.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="relationship-query-key" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines an alias for a join to another class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="query-key">
<xsd:sequence>
<xsd:element name="reference-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified name of the target referenced class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:choice>
<xsd:element name="foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key join condition between the source and target class' tables.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="criteria" type="criteria">
<xsd:annotation>
<xsd:documentation>The join criteria between the source and target class' tables.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="one-to-one-query-key">
<xsd:annotation>
<xsd:documentation>Defines an alias for a 1-1 join to another class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-query-key" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="one-to-many-query-key">
<xsd:annotation>
<xsd:documentation>Defines an alias for a 1-m join from another class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="relationship-query-key" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="abstract-direct-mapping">
<xsd:annotation>
<xsd:documentation>Defines a mapping from an attirbute to a simple field datatype, i.e. String, Number, Date.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="attribute-mapping">
<xsd:sequence>
<xsd:element name="field" type="field">
<xsd:annotation>
<xsd:documentation>The name and optionally the table of the field/column that the attribute is stored into.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="null-value" type="xsd:anySimpleType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Optionally specify a value that null data values should be converted to.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="converter" type="value-converter" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Optionally specify how the data value should be converted to the object value.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="attribute-classification" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="attribute-mapping">
<xsd:annotation>
<xsd:documentation>Defines how a attribute is persisted. The attribute mapping definition is extendable to allow for different types of mappings.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="attribute-name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the attribute. This is the implementation class attribute name.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="read-only" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the attribute is read-only.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="get-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the get method for the attribute.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="set-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the set method for the attribute.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="properties">
<xsd:annotation>
<xsd:documentation>Allow for user defined properties to be defined.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="property" type="property">
<xsd:annotation>
<xsd:documentation>A user defined property.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="direct-mapping">
<xsd:annotation>
<xsd:documentation>Defines how a simple attribute is persisted.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="abstract-direct-mapping">
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="xml-direct-mapping">
<xsd:annotation>
<xsd:documentation>Defines a mapping from an attirbute to a simple field datatype, i.e. String, Number, Date.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="abstract-direct-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" name="is-cdata" type="xsd:boolean" />
<xsd:element minOccurs="0" name="null-policy" type="abstract-null-policy" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="eis-direct-mapping">
<xsd:annotation>
<xsd:documentation>Defines a mapping from an attirbute to a simple field datatype, i.e. String, Number, Date.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="abstract-direct-mapping" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="field-transformation" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a field transformation for a transformation mapping</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="field" type="field" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="method-based-field-transformation">
<xsd:complexContent mixed="false">
<xsd:extension base="field-transformation">
<xsd:sequence>
<xsd:element name="method" type="xsd:string" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="transformer-based-field-transformation">
<xsd:complexContent mixed="false">
<xsd:extension base="field-transformation">
<xsd:sequence>
<xsd:element name="transformer-class" type="xsd:string" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="abstract-transformation-mapping">
<xsd:annotation>
<xsd:documentation>Defines a transformation mapping that uses Java code to transform between the data and object values.</xsd:documentation>
<xsd:documentation>This can be used if a single attribute maps to multiple fields, or field only mappings or attribute only mappings.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="attribute-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" name="attribute-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the attribute transformation defined in the domain class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="attribute-transformer" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The class name of the attribute transformer. Used in place of attribute-transformation.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="mutable" type="xsd:boolean" />
<xsd:element minOccurs="0" name="indirection" type="indirection-policy" />
<xsd:element minOccurs="0" name="field-transformations">
<xsd:annotation>
<xsd:documentation>The field transformations.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field-transformation" type="field-transformation" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="transformation-mapping">
<xsd:annotation>
<xsd:documentation>This can be used if a single attribute maps to multiple fields, or field only mappings or attribute only mappings.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="abstract-transformation-mapping" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="xml-transformation-mapping">
<xsd:annotation>
<xsd:documentation>This can be used if a single attribute maps to multiple fields, or field only mappings or attribute only mappings.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="abstract-transformation-mapping" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="eis-transformation-mapping">
<xsd:annotation>
<xsd:documentation>This can be used if a single attribute maps to multiple fields, or field only mappings or attribute only mappings.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="abstract-transformation-mapping" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="aggregate-object-mapping">
<xsd:annotation>
<xsd:documentation>Defines a relationship where the target object is strictly privately owned by the source object and stores within the source objects row</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="attribute-mapping">
<xsd:sequence>
<xsd:element name="reference-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified class name of the target class of the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="allow-null" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if a row of all nulls should be interpreted as null.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="field-translations">
<xsd:annotation>
<xsd:documentation>Allow for the mapping to use different field names than the descriptor.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field-translation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="source-field" type="field">
<xsd:annotation>
<xsd:documentation>The field in the source descriptor's table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="target-field" type="field">
<xsd:annotation>
<xsd:documentation>The field in the aggregate descriptor.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="relationship-mapping">
<xsd:annotation>
<xsd:documentation>Defines how a relationship between two classes is persisted.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="attribute-mapping">
<xsd:sequence>
<xsd:element name="reference-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The fully qualified class name of the target class of the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="private-owned" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the target objects are privately owned dependent objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="cascade-persist" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the create operation should be cascaded to the referenced object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="cascade-merge" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the create operation should be cascaded to the referenced object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="cascade-refresh" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the refresh operation should be cascaded to the referenced object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="cascade-remove" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the remove operation should be cascaded to the referenced object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="one-to-one-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-1 relationship from the source instance to the target instance.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" name="foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key in the source class' table that defines the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="foreign-key-fields">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field" type="field">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-object-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="join-fetch" type="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Specify to always join the related objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="eis-one-to-one-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-1 relationship from the source instance to the target instance.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="one-to-one-mapping" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="one-to-many-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-m relationship from the source instance to the target instances.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element name="target-foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key in the target class' table that defines the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-all-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-all-query" type="delete-all-query">
<xsd:annotation>
<xsd:documentation>A query to delete all of the related objects can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="join-fetch" type="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Specify to always join the related objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="eis-one-to-many-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-m relationship from the source instance to the target instances.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" name="source-foreign-key-fields">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field" type="field">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="target-foreign-key-fields">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field" type="field">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="foreign-key-grouping-element" type="field" />
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-all-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-all-query" type="delete-all-query">
<xsd:annotation>
<xsd:documentation>A query to delete all of the related objects can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="direct-collection-mapping">
<xsd:annotation>
<xsd:documentation>Defines a collection of simple types relationship from the source instance to a set of simple data values.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="attribute-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="data-read-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target data values.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="reference-table" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the reference table that stores the source primary key and the data values.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="direct-field" type="field">
<xsd:annotation>
<xsd:documentation>The field/column in the reference table that stores the data values.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="reference-foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key in the reference table that defines the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="value-converter" type="value-converter">
<xsd:annotation>
<xsd:documentation>Optionally specify how the data value should be converted to the object value.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="insert-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to insert a row into the reference table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to delete a row from the reference table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-all-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to delete all of the rows from the reference table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="session-name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name session that defines the reference table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="history-policy" type="history-policy">
<xsd:annotation>
<xsd:documentation>Defines how past versions of this attribute are persisted to the data-store. By default there will be no history policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="join-fetch" type="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Specify to always join the related objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="direct-map-mapping">
<xsd:annotation>
<xsd:documentation>Defines a map relationship from the source instance to a set of key values pairs of simple data values.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="direct-collection-mapping">
<xsd:sequence>
<xsd:element name="direct-key-field" type="field">
<xsd:annotation>
<xsd:documentation>The field/column in the reference table that sores the map key data value.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="key-converter" type="value-converter">
<xsd:annotation>
<xsd:documentation>Optionally specify how the key data value should be converted to the object value.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="aggregate-collection-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-m relationship from the source instance to the target instances where the target instances are strictly privately owned by the source object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element name="target-foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key in the target class' table that defines the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-all-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-all-query" type="delete-all-query">
<xsd:annotation>
<xsd:documentation>A query to delete all of the related objects can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="join-fetch" type="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Specify to always join the related objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="many-to-many-mapping">
<xsd:annotation>
<xsd:documentation>Defines a m-m relationship from the source instance to the target instances.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element name="relation-table" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The name of the relation table that stores the source/target primary keys.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="source-relation-foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key from the relational table to the source class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="target-relation-foreign-key" type="foreign-key">
<xsd:annotation>
<xsd:documentation>The foreign key from the relational table to the target class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-all-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="insert-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to insert a row into the relation table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to delete a row from the relation table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="delete-all-query" type="data-modify-query">
<xsd:annotation>
<xsd:documentation>A query to delete all of the rows from the relation table can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="history-policy" type="history-policy">
<xsd:annotation>
<xsd:documentation>Defines how past versions of this attribute are persisted to the data-store. By default there will be no history policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="join-fetch" type="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Specify to always join the related objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="variable-one-to-one-mapping">
<xsd:annotation>
<xsd:documentation>Defines a 1-1 relationship from the source instance to the target instance that may be of several types related through an interface.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="relationship-mapping">
<xsd:sequence>
<xsd:element minOccurs="0" name="bidirectional-target-attribute" type="xsd:string">
<xsd:annotation>
<xsd:documentation>For bi-directional relationships the target inverse relationship can be defined.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="batch-reading" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify to optimize reads for the class by batching the reads to this relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="indirection" type="indirection-policy">
<xsd:annotation>
<xsd:documentation>The indirection policy to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="selection-query" type="read-object-query">
<xsd:annotation>
<xsd:documentation>Specify the query to use to select the target objects.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="type-field" type="field">
<xsd:annotation>
<xsd:documentation>Specify the column to store the class type of the related object into.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="foreign-key-fields">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="field" type="field">
<xsd:annotation>
<xsd:documentation>The set of foreign key fields populated by this relationship in the source class' table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="foreign-key-to-query-key">
<xsd:annotation>
<xsd:documentation>The list of source/target column/query key references relating a foreign key in one table to the query keys defining a primary or unique key value in the other interface descriptor.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="query-key-reference">
<xsd:annotation>
<xsd:documentation>The reference of a source table foreign key and a target interface descriptor query key.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="source-field" type="field">
<xsd:annotation>
<xsd:documentation>The foreign key field/column name in the source table.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="target-query-key" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The query key name of the target interface descriptor.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="class-indicator-mappings" type="class-indicator-mappings">
<xsd:annotation>
<xsd:documentation>The set of class indicator values and the subclasses they map to.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="container-policy">
<xsd:annotation>
<xsd:documentation>Defines a container/collection type.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="collection-type" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the collection implementation class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="sorted-collection-container-policy">
<xsd:annotation>
<xsd:documentation>Defines a sorted collection type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy">
<xsd:sequence>
<xsd:element minOccurs="0" name="comparator-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the comparitor, used to compare objects in sorting the collection.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="list-container-policy">
<xsd:annotation>
<xsd:documentation>Defines a list collection type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="map-container-policy">
<xsd:annotation>
<xsd:documentation>Defines a map container type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy">
<xsd:sequence>
<xsd:element minOccurs="0" name="map-key-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the method to call on the target objects to get the key value for the map.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="direct-map-container-policy">
<xsd:annotation>
<xsd:documentation>Defines a direct map container type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="scrollable-cursor-policy">
<xsd:annotation>
<xsd:documentation>Defines a scrollable cursor container type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="cursored-stream-policy">
<xsd:annotation>
<xsd:documentation>Defines a cursored stream container type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="container-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="indirection-policy" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a deferred read indirection mechanism.</xsd:documentation>
</xsd:annotation>
</xsd:complexType>
<xsd:complexType name="value-holder-indirection-policy">
<xsd:annotation>
<xsd:documentation>Defines usage of value holders to implement indirection.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="indirection-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="proxy-indirection-policy">
<xsd:annotation>
<xsd:documentation>Defines usage of proxies to implement indirection.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="indirection-policy" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="transparent-collection-indirection-policy">
<xsd:annotation>
<xsd:documentation>Defines usage of transparent collections to implement indirection.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="indirection-policy">
<xsd:sequence>
<xsd:element minOccurs="0" name="collection-type" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the collection interface to use, i.e. List, Set, Map.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="map-key-method" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the method to call on the target objects to get the key value for the map.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="container-indirection-policy">
<xsd:annotation>
<xsd:documentation>Defines usage of a user defined container to implement indirection.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="indirection-policy">
<xsd:sequence>
<xsd:element name="container-type" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the container implementer to use.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="typesafe-enumeration-converter">
<xsd:annotation>
<xsd:documentation>Typesafe Enumeration conversion</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="value-converter" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="type-conversion-converter">
<xsd:annotation>
<xsd:documentation>Specifies the data type and an object type of the attribute to convert between.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="value-converter">
<xsd:sequence>
<xsd:element minOccurs="0" name="object-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the attribute type.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="data-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the attributes storage data type.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="serialized-object-converter">
<xsd:annotation>
<xsd:documentation>Uses object serialization to convert between the object and data type.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="value-converter">
<xsd:sequence>
<xsd:element minOccurs="0" name="data-type" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specifies the fully qualified class name of the attributes storage data type.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="object-type-converter">
<xsd:annotation>
<xsd:documentation>Specifies a mapping of values from database values used in the field and object values used in the attribute.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="value-converter">
<xsd:sequence>
<xsd:element minOccurs="0" name="default-value" type="xsd:anySimpleType">
<xsd:annotation>
<xsd:documentation>An optional default value can be specified. This value is used if a database type is not found in the type mapping.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="type-mappings">
<xsd:annotation>
<xsd:documentation>Specifies the mapping of values. Both the object and database values must be unique.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="type-mapping" type="type-mapping">
<xsd:annotation>
<xsd:documentation>Defines the object and data value mapping.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="attribute-only-type-mappings">
<xsd:annotation>
<xsd:documentation>Specifies a mapping of additional values that map non-unique data values to a unique attribute value.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="type-mapping" type="type-mapping">
<xsd:annotation>
<xsd:documentation>Defines the object and data value mapping.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="type-mapping">
<xsd:annotation>
<xsd:documentation>Define an object and data value mapping.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="object-value" type="xsd:anySimpleType">
<xsd:annotation>
<xsd:documentation>Specifies the value to use in the object's attribute.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="data-value" type="xsd:anySimpleType">
<xsd:annotation>
<xsd:documentation>Specifies the value to use in the database field.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="database-query" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a query/interaction against a database.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="query">
<xsd:sequence>
<xsd:element minOccurs="0" default="true" name="maintain-cache" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the query should bypass the cache completely.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="bind-all-parameters" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the query should use paramater binding for arguments, or print the arguments in-line.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="cache-statement" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the queries statement should be cached, this must be used with parameter binding.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="timeout" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specifies a timeout to cancel the query in if the request takes too long to complete.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="prepare" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the query should prepare and cache its generated SQL, or regenerate the SQL on each execution.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="call" type="criteria">
<xsd:annotation>
<xsd:documentation>For static calls the SQL or Stored Procedure call definition can be specified.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:simpleType name="join-fetch-type">
<xsd:annotation>
<xsd:documentation>Defines the set of valid join fetch options.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="inner-join" />
<xsd:enumeration value="outer-join" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="cascade-policy">
<xsd:annotation>
<xsd:documentation>Defines the set of valid cascade policies.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="private" />
<xsd:enumeration value="all" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="value-read-query">
<xsd:annotation>
<xsd:documentation>Defines a query for reading a single value.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="direct-read-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="direct-read-query">
<xsd:annotation>
<xsd:documentation>Defines a query for reading a collection of values.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="data-read-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="data-read-query">
<xsd:annotation>
<xsd:documentation>Defines a query for reading raw data.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="read-query">
<xsd:sequence>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="read-query" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a query for reading.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="database-query">
<xsd:sequence>
<xsd:element minOccurs="0" default="false" name="cache-query-results" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specifies if the query should cache the query results to avoid future executions.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="max-rows" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specifies the maximum number of rows to fetch, results will be trunctate on the database to this size.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="first-result" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specifies where to start the cursor in a result set returned from the database. Results prior to this number will not be built into objects</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="fetch-size" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>Specifiess the number of rows to fetch from the database on each result set next operation.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="query-result-cache-policy" type="query-result-cache-policy">
<xsd:annotation>
<xsd:documentation>Specify how the query results should be cached.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="query-result-cache-policy">
<xsd:annotation>
<xsd:documentation>Defines how a query's results should be cached.</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element minOccurs="0" name="invalidation-policy" type="cache-invalidation">
<xsd:annotation>
<xsd:documentation>Defines the cache invalidation policy. By default there will be no cache invalidation policy.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="100" name="maximum-cached-results" type="xsd:integer">
<xsd:annotation>
<xsd:documentation>This defines the number of query result sets that will be cached. The LRU query results will be discarded when the max size is reached.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="data-modify-query">
<xsd:annotation>
<xsd:documentation>Defines a query for manipulating data.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="database-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="object-modify-query" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a query for modifying an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="database-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="update-object-query">
<xsd:annotation>
<xsd:documentation>Defines a query for updating an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="object-modify-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="insert-object-query">
<xsd:annotation>
<xsd:documentation>Defines a query for inserting an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="object-modify-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="delete-object-query">
<xsd:annotation>
<xsd:documentation>Defines a query for deleting an object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="object-modify-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="does-exist-query">
<xsd:annotation>
<xsd:documentation>Defines a query for determining if an object exists.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="database-query">
<xsd:sequence>
<xsd:element minOccurs="0" name="existence-check" type="existence-check">
<xsd:annotation>
<xsd:documentation>The existence check option.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:simpleType name="existence-check">
<xsd:annotation>
<xsd:documentation>Defines the set of valid existence check options.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="check-cache" />
<xsd:enumeration value="check-database" />
<xsd:enumeration value="assume-existence" />
<xsd:enumeration value="assume-non-existence" />
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="delete-all-query">
<xsd:annotation>
<xsd:documentation>Defines a query for deleting a criteria of objects.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="database-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="object-level-read-query" abstract="true">
<xsd:annotation>
<xsd:documentation>Defines a query for objects (as apposed to data).</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="read-query">
<xsd:sequence>
<xsd:element minOccurs="0" name="reference-class" type="xsd:string">
<xsd:annotation>
<xsd:documentation>The full qualified name of the class of objects being queried.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="refresh" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the query should refresh any cached objects from the database.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="remote-refresh" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the query should refresh any remotely cached objects from the server.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="cascade-policy" type="cascade-policy">
<xsd:annotation>
<xsd:documentation>Specifies if the queries settings (such as refresh, maintain-cache) should apply to the object's relationship queries.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="primary-key" name="cache-usage" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify how the query should interact with the cache.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="lock-mode" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify if the query should lock the resulting rows on the database.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="none" name="distinct-state" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify if the query should filter distinct results.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="in-memory-querying">
<xsd:annotation>
<xsd:documentation>The in memory querying policy.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element default="ignore-exceptions-return-conformed" name="policy" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify how indirection or unconformable expressions should be treating with in-memory querying and conforming.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" default="true" name="use-default-fetch-group" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the default fetch group should be used for the query.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="fetch-group" type="fetch-group">
<xsd:annotation>
<xsd:documentation>Allow the query to partially fetch the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="fetch-group-name" type="xsd:string">
<xsd:annotation>
<xsd:documentation>Specify a pre-defined named fetch group to allow the query to partially fetch the object.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="use-exclusive-connection" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if the exclusive connection (VPD) should be used for the query.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="joined-attribute-expressions">
<xsd:annotation>
<xsd:documentation>Specifies the attributes being joined.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="expression" type="expression">
<xsd:annotation>
<xsd:documentation>Represents an expression for joining</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="read-only" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>Specify if objects resulting from the query are read-only, and will not be registered in the unit of work.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" default="false" name="outer-join-subclasses" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation>For inheritance queries specify if all subclasses should be outer joined, instead of a query per subclass.</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="read-all-query">
<xsd:annotation>
<xsd:documentation>Defines a query for a set of objects.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="object-level-read-query">
<xsd:sequence>
<xsd:element minOccurs="0" name="container" type="container-policy">
<xsd:annotation>
<xsd:documentation>Defines the collection type to use for the relationship.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="batch-read-attribute-expressions">
<xsd:annotation>
<xsd:documentation>Specifies all attributes for batch reading.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="expression" type="expression">
<xsd:annotation>
<xsd:documentation>Represents an expression for batch reading</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="order-by-expressions">
<xsd:annotation>
<xsd:documentation>Sets the order expressions for the query.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="expression" type="expression">
<xsd:annotation>
<xsd:documentation>Represents an expression for ordering</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="read-object-query">
<xsd:annotation>
<xsd:documentation>Defines a query for a single object.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="object-level-read-query" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="report-query">
<xsd:annotation>
<xsd:documentation>Query for information about a set of objects instead of the objects themselves.</xsd:documentation>
</xsd:annotation>
<xsd:complexContent mixed="false">
<xsd:extension base="read-all-query">
<xsd:sequence>
<xsd:element minOccurs="0" name="return-choice" type="return-choice">
<xsd:annotation>
<xsd:documentation>Simplifies the result by only returning the first result, first value, or all attribute values.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="retrieve-primary-keys" type="retrieve-primary-keys">
<xsd:annotation>
<xsd:documentation>Indicates wether the primary key values should also be retrieved for the reference class.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element minOccurs="0" name="report-items">
<xsd:annotation>
<xsd:documentation>Items to be selected, these could be attributes or aggregate functions.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="item" type="report-item">
<xsd:annotation>
<xsd:documentation>Represents an item requested</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="group-by-expressions">
<xsd:annotation>
<xsd:documentation>Sets GROUP BY expressions for the query.</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="expression" type="expression">
<xsd:annotation>
<xsd:documentation>Represents an expression for grouping</xsd:documentation>
</xsd:annotation>