帆软使用的第三方框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

2074 lines
100 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.hibernate.org/xsd/orm/hbm"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify"
targetNamespace="http://www.hibernate.org/xsd/orm/hbm"
elementFormDefault="qualified"
jaxb:extensionBindingPrefixes="simplify"
jaxb:version="1.0"
version="4.0">
<xs:annotation>
<xs:documentation>
This document defines the legacy Hibernate mapping schema. The root element in
such mappings is the hibernate-mapping element.
</xs:documentation>
</xs:annotation>
<xs:element name="hibernate-mapping">
<xs:annotation>
<xs:documentation>
The document root.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
<xs:element name="identifier-generator" type="IdentifierGeneratorDefinitionType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="typedef" type="TypeDefinitionType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="filter-def" type="FilterDefinitionType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="import" type="ClassRenameType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="class" type="RootEntityType"/>
<xs:element name="subclass" type="DiscriminatorSubclassEntityType"/>
<xs:element name="joined-subclass" type="JoinedSubclassEntityType"/>
<xs:element name="union-subclass" type="UnionSubclassEntityType"/>
<xs:element name="resultset" type="ResultSetMappingType" minOccurs="0" maxOccurs="unbounded"/>
<xs:group ref="NamedQueryGroup" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="fetch-profile" type="FetchProfileType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="database-object" type="AuxiliaryDatabaseObjectType" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
<xs:attribute name="auto-import" default="true" type="xs:boolean"/>
<xs:attribute name="catalog" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="default-access" default="property" type="xs:string"/>
<xs:attribute name="default-cascade" default="none" type="xs:string"/>
<xs:attribute name="default-lazy" default="true" type="xs:boolean"/>
<xs:attribute name="package" type="ClassNameType"/>
<xs:attribute name="schema" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="ToolingHintContainer" abstract="true">
<xs:annotation>
<xs:documentation>
Describes an XSD base type for any complex type that can contain "tooling hints".
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element name="meta" type="ToolingHintType" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="ToolingHintType" mixed="true">
<xs:annotation>
<xs:documentation><![CDATA[
<meta.../> is used to assign meta-level attributes to a class
or property. Is currently used by tooling as a placeholder for
values that is not directly related to OR mappings.
Example: <meta attribute="someHintName">the-hint-value</meta>
]]></xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="attribute" use="required" type="xs:string"/>
<xs:attribute name="inherit" default="true" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="IdentifierGeneratorDefinitionType">
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="TypeDefinitionType">
<xs:complexContent>
<xs:extension base="ConfigParameterContainer">
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="FilterDefinitionType" mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="filter-param" type="FilterParameterType"/>
</xs:sequence>
<xs:attribute name="condition" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="FilterParameterType">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ClassRenameType">
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="rename" type="xs:string"/>
</xs:complexType>
<xs:complexType name="AuxiliaryDatabaseObjectType">
<xs:sequence>
<xs:choice>
<xs:element name="definition">
<xs:complexType>
<xs:attribute name="class" use="required" type="ClassNameType"/>
</xs:complexType>
</xs:element>
<xs:sequence>
<xs:element name="create" type="xs:string"/>
<xs:element name="drop" type="xs:string"/>
</xs:sequence>
</xs:choice>
<xs:element name="dialect-scope" minOccurs="0" maxOccurs="unbounded" type="DialectScopeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DialectScopeType" mixed="true">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="FetchProfileType">
<xs:sequence>
<xs:element name="fetch" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation><![CDATA[
The <fetch> element defines a single path to which the fetch
refers, as well as the style of fetch to apply. The 'root' of the
path is different depending upon the context in which the
containing <fetch-profile/> occurs; within a <class/> element,
the entity-name of the containing class mapping is assumed...
]]></xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="association" use="required" type="xs:string"/>
<xs:attribute name="entity" type="xs:string"/>
<!-- Implied as long as the containing fetch profile is contained in a class mapping -->
<xs:attribute name="style" default="join" type="FetchStyleEnum">
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Named queries -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<xs:group name="NamedQueryGroup">
<xs:choice>
<xs:element name="query" type="NamedQueryType"/>
<xs:element name="sql-query" type="NamedNativeQueryType"/>
</xs:choice>
</xs:group>
<xs:complexType name="NamedQueryType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="query-param" type="QueryParamType"/>
</xs:choice>
<xs:attribute name="cache-mode" type="CacheModeEnum"/>
<xs:attribute name="cache-region" type="xs:string"/>
<xs:attribute name="cacheable" default="false" type="xs:boolean"/>
<xs:attribute name="comment" type="xs:string"/>
<xs:attribute name="fetch-size" type="xs:int"/>
<xs:attribute name="flush-mode" type="FlushModeEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="read-only" default="false" type="xs:boolean"/>
<xs:attribute name="timeout" type="xs:int"/>
</xs:complexType>
<xs:complexType name="NamedNativeQueryType" mixed="true">
<xs:annotation>
<xs:documentation>
The sql-query element declares a named SQL query string
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="query-param" type="QueryParamType"/>
<xs:group ref="NativeQueryReturnGroup"/>
<xs:element name="synchronize" type="synchronize-type"/>
</xs:choice>
<xs:attribute name="cache-mode" type="CacheModeEnum"/>
<xs:attribute name="cache-region" type="xs:string"/>
<xs:attribute name="cacheable" default="false" type="xs:boolean"/>
<xs:attribute name="comment" type="xs:string"/>
<xs:attribute name="fetch-size" type="xs:int"/>
<xs:attribute name="flush-mode" type="FlushModeEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="read-only" default="false" type="xs:boolean"/>
<xs:attribute name="timeout" type="xs:int"/>
<xs:attribute name="callable" default="false" type="xs:boolean"/>
<xs:attribute name="resultset-ref" type="xs:string"/>
</xs:complexType>
<xs:complexType name="QueryParamType">
<xs:annotation>
<xs:documentation>
The query-param element is used only by tools that generate
finder methods for named queries
</xs:documentation>
</xs:annotation>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ResultSetMappingType">
<xs:annotation>
<xs:documentation>
The resultset element declares a named resultset mapping definition for SQL queries
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="valueMappingSources"/>
</xs:appinfo>
</xs:annotation>
<!--
Do *not* apply simplify to this. The ordering amongst the elements IS IMPORTANT
-->
<xs:group ref="NativeQueryReturnGroup"/>
</xs:choice>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<xs:group name="NativeQueryReturnGroup">
<xs:choice>
<xs:element name="return-scalar" type="NativeQueryScalarReturnType"/>
<xs:element name="return" type="NativeQueryReturnType"/>
<xs:element name="return-join" type="NativeQueryJoinReturnType"/>
<xs:element name="load-collection" type="NativeQueryCollectionLoadReturnType"/>
</xs:choice>
</xs:group>
<xs:complexType name="NativeQueryScalarReturnType">
<xs:attribute name="column" use="required" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
<xs:complexType name="NativeQueryReturnType">
<xs:annotation>
<xs:documentation>
Defines a return component for a sql-query. Alias refers to the alias
used in the actual sql query; lock-mode specifies the locking to be applied
when the query is executed. The class, collection, and role attributes are mutually exclusive;
class refers to the class name of a "root entity" in the object result; collection refers
to a collection of a given class and is used to define custom sql to load that owned collection
and takes the form "ClassName.propertyName"; role refers to the property path for an eager fetch
and takes the form "owningAlias.propertyName"
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="return-discriminator" minOccurs="0">
<xs:complexType>
<xs:attribute name="column" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="return-property" type="NativeQueryPropertyReturnType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="alias" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="lock-mode" default="read" type="LockModeEnum"/>
</xs:complexType>
<xs:complexType name="NativeQueryPropertyReturnType">
<xs:sequence>
<xs:element name="return-column" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="NativeQueryJoinReturnType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="return-property" type="NativeQueryPropertyReturnType"/>
</xs:sequence>
<xs:attribute name="alias" use="required" type="xs:string"/>
<xs:attribute name="lock-mode" default="read" type="LockModeEnum"/>
<xs:attribute name="property" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="NativeQueryCollectionLoadReturnType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="return-property" type="NativeQueryPropertyReturnType"/>
</xs:sequence>
<xs:attribute name="alias" use="required" type="xs:string"/>
<xs:attribute name="lock-mode" default="read" type="LockModeEnum"/>
<xs:attribute name="role" use="required" type="xs:string"/>
</xs:complexType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Entity definitions -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<xs:complexType name="EntityBaseDefinition" abstract="true">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:attribute name="name" type="ClassNameType"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="abstract" type="xs:boolean"/>
<!-- default: none when toplevel, otherwise the nearest class definition -->
<xs:attribute name="lazy" type="xs:boolean"/>
<xs:attribute name="proxy" type="ClassNameType"/>
<xs:attribute name="batch-size" default="-1" type="xs:int"/>
<!-- default: none -->
<xs:attribute name="dynamic-insert" default="false" type="xs:boolean"/>
<xs:attribute name="dynamic-update" default="false" type="xs:boolean"/>
<!-- default: no proxy interface -->
<xs:attribute name="select-before-update" default="false" type="xs:boolean"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="persister" type="ClassNameType"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SubclassEntityBaseDefinition" abstract="true">
<xs:complexContent>
<xs:extension base="EntityBaseDefinition">
<xs:attribute name="extends" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="RootEntityType">
<xs:annotation>
<xs:documentation>
Root entity mapping. Poorly named as entities do not have to be represented by
classes at all. Mapped entities may be represented via different methodologies
(POJO, Map, Dom4j).
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="EntityBaseDefinition">
<xs:sequence>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="natural-id-cache" minOccurs="0" type="NaturalIdCacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:choice>
<xs:element name="id" type="SimpleIdType"/>
<xs:element name="composite-id" type="CompositeIdType"/>
</xs:choice>
<xs:element name="discriminator" minOccurs="0" type="EntityDiscriminatorType"/>
<xs:element name="natural-id" minOccurs="0" type="natural-id-type"/>
<xs:choice minOccurs="0">
<xs:element name="version" type="VersionAttributeType"/>
<xs:element name="timestamp" type="TimestampAttributeType"/>
</xs:choice>
<xs:element name="multi-tenancy" minOccurs="0" type="multi-tenancy-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:element name="idbag" type="IdBagCollectionType"/>
<xs:group ref="SingularAttributeGroup"/>
</xs:choice>
<xs:choice>
<xs:sequence>
<xs:element name="join" minOccurs="0" maxOccurs="unbounded" type="SecondaryTableType"/>
<xs:element name="subclass" minOccurs="0" maxOccurs="unbounded" type="DiscriminatorSubclassEntityType"/>
</xs:sequence>
<xs:element name="joined-subclass"
minOccurs="0"
maxOccurs="unbounded"
type="JoinedSubclassEntityType"/>
<xs:element name="union-subclass"
minOccurs="0"
maxOccurs="unbounded"
type="UnionSubclassEntityType"/>
</xs:choice>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
<xs:element name="fetch-profile" minOccurs="0" maxOccurs="unbounded" type="FetchProfileType"/>
<xs:element name="resultset" minOccurs="0" maxOccurs="unbounded" type="ResultSetMappingType"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
<xs:group ref="NamedQueryGroup"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="catalog" type="xs:string"/>
<xs:attribute name="check" type="xs:string"/>
<xs:attribute name="discriminator-value" type="xs:string"/>
<xs:attribute name="mutable" default="true" type="xs:boolean"/>
<xs:attribute name="optimistic-lock" default="version" type="OptimisticLockStyleEnum"/>
<xs:attribute name="polymorphism" default="implicit" type="PolymorphismEnum"/>
<xs:attribute name="rowid" type="xs:string"/>
<xs:attribute name="schema" type="xs:string"/>
<xs:attribute name="subselect" type="xs:string"/>
<xs:attribute name="table" type="xs:string"/>
<xs:attribute name="where" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="JoinedSubclassEntityType">
<xs:annotation>
<xs:documentation><![CDATA[
Joined subclasses are used for the normalized table-per-subclass mapping strategy
See the note on the class element regarding <pojo/> vs. @name usage...
]]></xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="SubclassEntityBaseDefinition">
<xs:sequence>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:group ref="SingularAttributeGroup"/>
<xs:element name="idbag" type="IdBagCollectionType"/>
</xs:choice>
<xs:element name="joined-subclass"
minOccurs="0"
maxOccurs="unbounded"
type="JoinedSubclassEntityType"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlGroup" minOccurs="0"/>
<xs:element name="fetch-profile" minOccurs="0" maxOccurs="unbounded" type="FetchProfileType"/>
<xs:element name="resultset" minOccurs="0" maxOccurs="unbounded" type="ResultSetMappingType"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
<xs:group ref="NamedQueryGroup"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attribute name="check" type="xs:string"/>
<xs:attribute name="discriminator-value" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="UnionSubclassEntityType">
<xs:annotation>
<xs:documentation><![CDATA[
Union subclasses are used for the table-per-concrete-class mapping strategy
See the note on the class element regarding <pojo/> vs. @name usage...
]]></xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="SubclassEntityBaseDefinition">
<xs:sequence>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:element name="idbag" type="IdBagCollectionType"/>
<xs:group ref="SingularAttributeGroup"/>
</xs:choice>
<xs:element name="union-subclass"
minOccurs="0"
maxOccurs="unbounded"
type="UnionSubclassEntityType"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlGroup" minOccurs="0"/>
<xs:element name="fetch-profile" minOccurs="0" maxOccurs="unbounded" type="FetchProfileType"/>
<xs:element name="resultset" minOccurs="0" maxOccurs="unbounded" type="ResultSetMappingType"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
<xs:group ref="NamedQueryGroup"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attribute name="check" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DiscriminatorSubclassEntityType">
<xs:annotation>
<xs:documentation><![CDATA[
Subclass declarations are nested beneath the root class declaration to achieve
polymorphic persistence with the table-per-hierarchy mapping strategy.
See the note on the class element regarding <pojo/> vs. @name usage...
]]></xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="SubclassEntityBaseDefinition">
<xs:sequence>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:group ref="SingularAttributeGroup"/>
<xs:element name="idbag" type="IdBagCollectionType"/>
</xs:choice>
<xs:element name="join" minOccurs="0" maxOccurs="unbounded" type="SecondaryTableType"/>
<xs:element name="subclass" minOccurs="0" maxOccurs="unbounded" type="DiscriminatorSubclassEntityType"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlGroup" minOccurs="0"/>
<xs:element name="fetch-profile" minOccurs="0" maxOccurs="unbounded" type="FetchProfileType"/>
<xs:element name="resultset" minOccurs="0" maxOccurs="unbounded" type="ResultSetMappingType"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<simplify:as-element-property/>
</xs:appinfo>
</xs:annotation>
<xs:group ref="NamedQueryGroup"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="discriminator-value" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SimpleIdType">
<xs:annotation>
<xs:documentation>
Declares the id type, column and generation algorithm for an entity class.
If a name attribute is given, the id is exposed to the application through the
named property of the class. If not, the id is only exposed to the application
via Session.getIdentifier()
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
<xs:element name="type" minOccurs="0" type="TypeSpecificationType"/>
<xs:element name="generator" minOccurs="0" type="GeneratorSpecificationType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="unsaved-value" type="xs:string"/>
<!-- any|none|null|undefined|0|-1|... -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CompositeIdType">
<xs:annotation>
<xs:documentation>
A composite key may be modelled by a java class with a property for each
key column. The class must implement java.io.Serializable and reimplement equals()
and hashCode().
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="key-property" type="CompositeKeyBasicAttributeType"/>
<xs:element name="key-many-to-one" type="CompositeKeyManyToOneType"/>
</xs:choice>
<xs:element name="generator" minOccurs="0" type="GeneratorSpecificationType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="mapped" default="false" type="xs:boolean"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="unsaved-value" default="undefined" type="UnsavedValueCompositeIdEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BaseVersionAttributeType" abstract="true">
<xs:annotation>
<xs:documentation>
Type definition that acts as a base for concrete definitions of mapped
attributes that can function as the basis of optimistic locking.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="generated" default="never" type="GenerationTimingVersionEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="VersionAttributeType">
<xs:annotation>
<xs:documentation>
Optimistic locking attribute based on an incrementing value.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="BaseVersionAttributeType">
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="insert" type="xs:boolean"/>
<xs:attribute name="type" default="integer" type="xs:string"/>
<xs:attribute name="unsaved-value" default="undefined" type="UnsavedValueVersionEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="TimestampAttributeType">
<xs:annotation>
<xs:documentation>
Optimistic locking attribute based on a (last-updated) timestamp.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="BaseVersionAttributeType">
<xs:attribute name="source" default="vm" type="TimestampSourceEnum"/>
<xs:attribute name="unsaved-value" default="null" type="UnsavedValueTimestampEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="natural-id-type">
<xs:annotation>
<xs:documentation>
A natural-id element allows declaration of the unique business key
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="component" type="CompositeAttributeType"/>
<xs:element name="dynamic-component" type="dynamic-component-type"/>
<xs:element name="any" type="AnyAssociationType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="mutable" default="false" type="xs:boolean"/>
</xs:complexType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Collections -->
<xs:complexType name="IdBagCollectionType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="collection-id" type="CollectionIdType" />
<xs:element name="key" type="key-type"/>
<xs:choice>
<xs:element name="element" type="BasicCollectionElementType"/>
<xs:element name="many-to-many" type="ManyToManyCollectionElementType"/>
<xs:element name="composite-element" type="CompositeCollectionElementType"/>
<xs:element name="many-to-any" type="ManyToAnyCollectionElementType"/>
</xs:choice>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attributeGroup ref="plural-basic-attribute-group"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="order-by" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CollectionIdType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
<xs:element name="generator" type="GeneratorSpecificationType"/>
</xs:sequence>
<xs:attribute name="column" use="required" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ArrayType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice>
<xs:element name="index" type="index-type"/>
<xs:element name="list-index" type="ListIndexType"/>
</xs:choice>
<xs:group ref="CollectionElementOptionGroup"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="batch-size" default="-1" type="xs:int"/>
<xs:attribute name="cascade" type="xs:string"/>
<xs:attribute name="check" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="collection-type" type="xs:string"/>
<xs:attribute name="element-class" type="xs:string"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="inverse" default="false" type="xs:boolean"/>
<xs:attribute name="mutable" default="true" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="persister" type="ClassNameType"/>
<xs:attribute name="where" type="xs:string"/>
<!-- default: none -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BagCollectionType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:group ref="CollectionElementOptionGroup"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attributeGroup ref="plural-basic-attribute-group"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="order-by" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ListType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice>
<xs:element name="index" type="index-type"/>
<xs:element name="list-index" type="ListIndexType"/>
</xs:choice>
<xs:group ref="CollectionElementOptionGroup"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attributeGroup ref="plural-basic-attribute-group"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MapType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice>
<xs:element name="map-key" type="MapKeyBasicType"/>
<xs:element name="composite-map-key" type="MapKeyCompositeType"/>
<xs:element name="map-key-many-to-many" type="MapKeyManyToManyType"/>
<xs:element name="index" type="index-type"/>
<xs:element name="composite-index" type="composite-index-type"/>
<xs:element name="index-many-to-many" type="index-many-to-many-type"/>
<xs:element name="index-many-to-any" type="index-many-to-any-type"/>
</xs:choice>
<xs:group ref="CollectionElementOptionGroup"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attributeGroup ref="plural-basic-attribute-group"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="order-by" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<!-- unsorted|natural|"comparator class", default: unsorted -->
<xs:attribute name="sort" default="unsorted" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SetType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:group ref="CollectionElementOptionGroup"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attributeGroup ref="plural-basic-attribute-group"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="lazy" type="LazyWithExtraEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="order-by" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="sort" default="unsorted" type="xs:string"/>
<!-- unsorted|natural|"comparator class" -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ListIndexType">
<xs:sequence>
<xs:element name="column" minOccurs="0" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="base" default="0" type="xs:string"/>
<xs:attribute name="column" type="xs:string"/>
</xs:complexType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Associations -->
<xs:complexType name="OneToManyCollectionElementType">
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="not-found" default="exception" type="NotFoundEnum"/>
</xs:complexType>
<xs:complexType name="OneToOneType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="formula" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="cascade" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="constrained" default="false" type="xs:boolean"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="fetch" type="FetchStyleEnum"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="lazy" type="LazyWithNoProxyEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="property-ref" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ManyToOneType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="cascade" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="fetch" type="FetchStyleEnum"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="index" type="xs:string"/>
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="lazy" type="LazyWithNoProxyEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="not-found" default="exception" type="NotFoundEnum"/>
<xs:attribute name="not-null" type="xs:boolean"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="property-ref" type="xs:string"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="unique-key" type="xs:string"/>
<xs:attribute name="update" default="true" type="xs:boolean"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ManyToManyCollectionElementType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:choice>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="filter-type"/>
</xs:sequence>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="fetch" type="FetchStyleEnum"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="lazy" type="LazyEnum"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="not-found" default="exception" type="NotFoundEnum"/>
<xs:attribute name="order-by" type="xs:string"/>
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="property-ref" type="xs:string"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="where" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="multi-tenancy-type">
<xs:sequence>
<xs:group minOccurs="0" ref="column-or-formula"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="shared" type="xs:boolean" default="true"/>
<xs:attribute name="bind-as-param" type="xs:boolean" default="true"/>
</xs:complexType>
<xs:complexType name="EntityDiscriminatorType">
<xs:annotation>
<xs:documentation>
Polymorphic data requires a column holding a class discriminator value. This
value is not directly exposed to the application.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:group minOccurs="0" ref="column-or-formula"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<!-- default: "class"|none -->
<xs:attribute name="force" default="false" type="xs:boolean"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="not-null" default="true" type="xs:boolean"/>
<xs:attribute name="type" default="string" type="xs:string"/>
</xs:complexType>
<xs:complexType name="AnyAssociationType">
<xs:annotation>
<xs:documentation>
A discriminated association where the discriminator is part of the
association, not the associated entity (compared to discriminator subclass)
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="meta-value" minOccurs="0" maxOccurs="unbounded" type="AnyValueMappingType"/>
<xs:element name="column" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="cascade" type="xs:string"/>
<xs:attribute name="id-type" use="required" type="xs:string"/>
<xs:attribute name="index" type="xs:string"/>
<!-- include the columns spanned by this association in an index -->
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="lazy" default="false" type="xs:boolean"/>
<xs:attribute name="meta-type" type="xs:string"/>
<!--- default: Hibernate.STRING -->
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="update" default="true" type="xs:boolean"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="AnyValueMappingType">
<xs:annotation>
<xs:documentation>
Defines the mapping of a discriminator value to a concrete entity in an any or
any-to-many mapping.
</xs:documentation>
</xs:annotation>
<xs:attribute name="class" use="required" type="xs:string"/>
<xs:attribute name="value" use="required" type="xs:string"/>
</xs:complexType>
<!-- The cache element enables caching of an entity class. -->
<xs:complexType name="CacheType">
<xs:attribute name="include" default="all" type="CacheInclusionEnum"/>
<xs:attribute name="region" type="xs:string"/>
<!-- default: class or collection role name -->
<xs:attribute name="usage" use="required" type="CacheUsageEnum"/>
</xs:complexType>
<xs:complexType name="NaturalIdCacheType">
<xs:attribute name="region" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ColumnType">
<xs:annotation>
<xs:documentation>
The column element is an alternative to column attributes and required for
mapping associations to classes with composite ids.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:annotation>
<xs:documentation>
The comment element allows definition of a database table or column comment.
</xs:documentation>
</xs:annotation>
<xs:element name="comment" minOccurs="0" type="xs:string"/>
</xs:sequence>
<xs:attribute name="check" type="xs:string"/>
<!-- default: no check constraint -->
<xs:attribute name="default" type="xs:string"/>
<!-- default: no default value -->
<xs:attribute name="index" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<!-- default: 255 -->
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="not-null" type="xs:boolean"/>
<!-- default: false (except for id properties) -->
<xs:attribute name="precision" type="xs:int"/>
<xs:attribute name="read" type="xs:string"/>
<!-- default: column name -->
<xs:attribute name="scale" type="xs:int"/>
<xs:attribute name="sql-type" type="xs:string"/>
<!-- override default column type for hibernate type -->
<xs:attribute name="unique" type="xs:boolean"/>
<!-- default: false (except for id properties) -->
<xs:attribute name="unique-key" type="xs:string"/>
<!-- default: no unique key -->
<xs:attribute name="write" type="xs:string"/>
<!-- default: parameter placeholder ('?') -->
</xs:complexType>
<xs:complexType name="CompositeAttributeType">
<xs:annotation>
<xs:documentation>
A component is a user-defined class, persisted along with its containing entity
to the table of the entity class. JavaBeans style properties of the component are
mapped to columns of the table of the containing entity. A null component reference
is mapped to null values in all columns and vice versa. Components do not support
shared reference semantics.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:element name="parent" minOccurs="0" type="parent-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:group ref="SingularAttributeGroup"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="lazy" default="false" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="update" default="true" type="xs:boolean"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CompositeCollectionElementType">
<xs:annotation>
<xs:documentation>
A composite element allows a collection to hold instances of an arbitrary
class, without the requirement of joining to an entity table. Composite elements
have component semantics - no shared references and ad hoc null value semantics.
Composite elements may not hold nested collections.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="parent" minOccurs="0" type="parent-type"/>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="any" type="AnyAssociationType"/>
<xs:element name="nested-composite-element" type="nested-composite-element-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="node" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="dynamic-component-type">
<xs:annotation>
<xs:documentation>
A dynamic-component maps columns of the database entity to a java.util.Map
at the Java level
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes" />
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:group ref="SingularAttributeGroup"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="update" default="true" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="BasicCollectionElementType">
<xs:annotation>
<xs:documentation>
Declares the element type of a collection where the element is of basic type
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:choice>
<xs:element name="type" minOccurs="0" type="TypeSpecificationType"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="not-null" default="false" type="xs:boolean"/>
<xs:attribute name="precision" type="xs:int"/>
<xs:attribute name="scale" type="xs:int"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="filter-type" mixed="true">
<xs:annotation>
<xs:documentation>
FILTER element; used to apply a filter.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="aliases" type="filter-alias-mapping-type" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="condition" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="autoAliasInjection" type="xs:string"/>
</xs:complexType>
<xs:complexType name="filter-alias-mapping-type">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="alias" type="xs:string" use="required"/>
<xs:attribute name="table" type="xs:string"/>
<xs:attribute name="entity" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="GeneratorSpecificationType">
<xs:annotation>
<xs:documentation>
Generators generate unique identifiers. The class attribute specifies a Java
class implementing an id generation algorithm.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ConfigParameterContainer">
<xs:attribute name="class" use="required" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="index-type">
<xs:annotation>
<xs:documentation>
Describes the index of an indexed collection. Indexed collection means either
a java.util.List, a persistent array or a java.util.Map.
For a List or array, this describes the list/array index value. Should prefer
to use 'list-index' instead.
For a Map, this describes the Map key value. Should prefer to use 'map-key' instead
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string" />
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
<xs:complexType name="SecondaryTableType">
<xs:annotation>
<xs:documentation>
A join allows some properties of a class to be persisted to a second table
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="component" type="CompositeAttributeType"/>
<xs:element name="dynamic-component" type="dynamic-component-type"/>
<xs:element name="any" type="AnyAssociationType"/>
</xs:choice>
<xs:group ref="CustomSqlDmlGroup"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attribute name="fetch" default="join" type="FetchStyleEnum"/>
<xs:attribute name="inverse" default="false" type="xs:boolean"/>
<xs:attribute name="optional" default="false" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="key-type">
<xs:annotation>
<xs:documentation>
Declares the column name of a foreign key.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="not-null" type="xs:boolean"/>
<xs:attribute name="on-delete" default="noaction" type="OnDeleteEnum"/>
<xs:attribute name="property-ref" type="xs:string"/>
<xs:attribute name="unique" type="xs:boolean"/>
<xs:attribute name="update" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="CompositeKeyManyToOneType">
<xs:annotation>
<xs:documentation>
A many-to-one association embedded in a composite identifier or map index
(always not-null, never cascade).
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="lazy" type="LazyEnum"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="on-delete" default="noaction" type="OnDeleteEnum"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CompositeKeyBasicAttributeType">
<xs:annotation>
<xs:documentation>
A property embedded in a composite identifier or map index (always not-null).
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
<xs:element name="type" minOccurs="0" type="TypeSpecificationType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="loader-type">
<xs:annotation>
<xs:documentation>
The loader element allows specification of a named query to be used for fetching
an entity or collection
</xs:documentation>
</xs:annotation>
<xs:attribute name="query-ref" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="ManyToAnyCollectionElementType">
<xs:annotation>
<xs:documentation>
A "many to any" defines a polymorphic association to any table
with the given identifier type. The first listed column is a VARCHAR column
holding the name of the class (for that row).
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="meta-value" minOccurs="0" maxOccurs="unbounded" type="AnyValueMappingType"/>
<xs:element name="column" minOccurs="2" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="id-type" use="required" type="xs:string"/>
<xs:attribute name="meta-type" type="xs:string"/>
<!--- default: Hibernate.CLASS -->
</xs:complexType>
<xs:complexType name="MapKeyBasicType">
<xs:annotation>
<xs:documentation>
Describes the key of a java.util.Map where the key is a basic (JPA term) type
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:choice>
<xs:element name="type" minOccurs="0" type="TypeSpecificationType"/>
</xs:sequence>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
<xs:complexType name="MapKeyCompositeType">
<xs:annotation>
<xs:documentation>
Describes the key of a java.util.Map where the key is a composite type
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="key-property" type="CompositeKeyBasicAttributeType"/>
<xs:element name="key-many-to-one" type="CompositeKeyManyToOneType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="class" use="required" type="ClassNameType"/>
</xs:complexType>
<xs:complexType name="MapKeyManyToManyType">
<xs:annotation>
<xs:documentation>
Describes the key of a java.util.Map where the key is an association (FK)
</xs:documentation>
</xs:annotation>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:sequence>
<xs:attribute name="class" type="ClassNameType"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="foreign-key" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
</xs:complexType>
<xs:complexType name="composite-index-type">
<xs:annotation>
<xs:documentation>
Describes the key of a java.util.Map which is a composite. Should prefer
'composite-map-key' instead
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="key-property" type="CompositeKeyBasicAttributeType"/>
<xs:element name="key-many-to-one" type="CompositeKeyManyToOneType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="class" use="required" type="ClassNameType"/>
</xs:complexType>
<xs:complexType name="index-many-to-many-type">
<xs:annotation>
<xs:documentation>
Describes the key of a java.util.Map which is an FK-association. Should prefer
'map-key-many-to-many' instead
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="entity-name" type="xs:string"/>
<xs:attribute name="foreign-key" type="xs:string"/>
</xs:complexType>
<xs:complexType name="index-many-to-any-type">
<xs:sequence>
<xs:element name="column" minOccurs="2" maxOccurs="unbounded" type="ColumnType"/>
</xs:sequence>
<xs:attribute name="id-type" use="required" type="xs:string"/>
<xs:attribute name="meta-type" type="xs:string"/>
<!--- default: Hibernate.CLASS -->
</xs:complexType>
<xs:complexType name="nested-composite-element-type">
<xs:sequence>
<xs:element name="parent" minOccurs="0" type="parent-type"/>
<xs:element name="tuplizer" minOccurs="0" maxOccurs="unbounded" type="tuplizer-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
</xs:appinfo>
</xs:annotation>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="any" type="AnyAssociationType"/>
<xs:element name="nested-composite-element" type="nested-composite-element-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="class" use="required" type="ClassNameType"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
</xs:complexType>
<xs:complexType name="parent-type">
<xs:annotation>
<xs:documentation>
The parent element maps a property of the component class as a pointer back to
the owning entity.
</xs:documentation>
</xs:annotation>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="PrimitiveArrayType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:element name="subselect" minOccurs="0" type="xs:string"/>
<xs:element name="cache" minOccurs="0" type="CacheType"/>
<xs:element name="synchronize" minOccurs="0" maxOccurs="unbounded" type="synchronize-type"/>
<!-- The comment element allows definition of a database table or column comment. -->
<xs:element name="comment" minOccurs="0" type="xs:string"/>
<xs:element name="key" type="key-type"/>
<xs:choice>
<xs:element name="index" type="index-type"/>
<xs:element name="list-index" type="ListIndexType"/>
</xs:choice>
<xs:element name="element" type="BasicCollectionElementType"/>
<xs:element name="loader" minOccurs="0" type="loader-type"/>
<xs:group ref="CustomSqlDmlCollectionGroup"/>
</xs:sequence>
<xs:attributeGroup ref="table-information-group"/>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="batch-size" default="-1" type="xs:int"/>
<xs:attribute name="check" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="collection-type" type="xs:string"/>
<xs:attribute name="embed-xml" type="xs:boolean"/>
<xs:attribute name="fetch" type="FetchStyleWithSubselectEnum"/>
<xs:attribute name="mutable" default="true" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="outer-join" type="OuterJoinEnum"/>
<xs:attribute name="persister" type="xs:string"/>
<xs:attribute name="where" type="xs:string"/>
<!-- default: none -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="properties-type">
<xs:annotation>
<xs:documentation>
properties declares that the contained properties form an alternate key. The name
attribute allows an alternate key to be used as the target of a property-ref.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="attributes"/>
<!--<simplify:as-element-property/>-->
</xs:appinfo>
</xs:annotation>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="component" type="CompositeAttributeType"/>
<xs:element name="dynamic-component" type="dynamic-component-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="insert" default="true" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="update" default="true" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="BasicAttributeType">
<xs:complexContent>
<xs:extension base="ToolingHintContainer">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="column-or-formula"/>
</xs:choice>
<xs:element name="type" minOccurs="0" type="TypeSpecificationType"/>
</xs:sequence>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="column" type="xs:string"/>
<xs:attribute name="formula" type="xs:string"/>
<xs:attribute name="generated" default="never" type="GenerationTimingEnum"/>
<xs:attribute name="index" type="xs:string"/>
<!-- include the columns spanned by this property in an index -->
<xs:attribute name="insert" type="xs:boolean"/>
<xs:attribute name="lazy" default="false" type="xs:boolean"/>
<xs:attribute name="length" type="xs:int"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="node" type="xs:string"/>
<xs:attribute name="not-null" type="xs:boolean"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="precision" type="xs:string"/>
<xs:attribute name="scale" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="unique" default="false" type="xs:boolean"/>
<xs:attribute name="unique-key" type="xs:string"/>
<xs:attribute name="update" type="xs:boolean"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="synchronize-type">
<xs:attribute name="table" use="required" type="xs:string"/>
</xs:complexType>
<xs:complexType name="tuplizer-type">
<xs:annotation>
<xs:documentation>
TUPLIZER element; defines tuplizer to use for a component/entity for a given entity-mode
</xs:documentation>
</xs:annotation>
<xs:attribute name="class" use="required" type="ClassNameType"/>
<!-- the tuplizer class to use -->
<xs:attribute name="entity-mode" type="EntityModeEnum"/>
</xs:complexType>
<xs:complexType name="TypeSpecificationType">
<xs:annotation>
<xs:documentation>
Declares the type of the containing property (overrides an eventually existing type
attribute of the property). May contain param elements to customize a ParametrizableType.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ConfigParameterContainer">
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ConfigParameterContainer" abstract="true">
<xs:sequence>
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ConfigParameterType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ConfigParameterType" mixed="true">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:group name="CollectionElementOptionGroup">
<xs:choice>
<xs:element name="element" type="BasicCollectionElementType"/>
<xs:element name="one-to-many" type="OneToManyCollectionElementType"/>
<xs:element name="many-to-many" type="ManyToManyCollectionElementType"/>
<xs:element name="composite-element" type="CompositeCollectionElementType"/>
<xs:element name="many-to-any" type="ManyToAnyCollectionElementType"/>
</xs:choice>
</xs:group>
<xs:group name="column-or-formula">
<xs:choice>
<xs:element name="column" type="ColumnType"/>
<xs:element name="formula" type="xs:string"/>
</xs:choice>
</xs:group>
<xs:group name="SingularAttributeGroup">
<xs:choice>
<xs:element name="property" type="BasicAttributeType"/>
<xs:element name="many-to-one" type="ManyToOneType"/>
<xs:element name="one-to-one" type="OneToOneType"/>
<xs:element name="component" type="CompositeAttributeType"/>
<xs:element name="dynamic-component" type="dynamic-component-type"/>
<xs:element name="properties" type="properties-type"/>
<xs:element name="any" type="AnyAssociationType"/>
<xs:element name="map" type="MapType"/>
<xs:element name="set" type="SetType"/>
<xs:element name="list" type="ListType"/>
<xs:element name="bag" type="BagCollectionType"/>
<xs:element name="array" type="ArrayType"/>
<xs:element name="primitive-array" type="PrimitiveArrayType"/>
</xs:choice>
</xs:group>
<xs:group name="CustomSqlDmlGroup">
<xs:sequence>
<xs:element name="sql-insert" minOccurs="0" type="CustomSqlDmlType"/>
<xs:element name="sql-update" minOccurs="0" type="CustomSqlDmlType"/>
<xs:element name="sql-delete" minOccurs="0" type="CustomSqlDmlType"/>
</xs:sequence>
</xs:group>
<xs:group name="CustomSqlDmlCollectionGroup">
<xs:sequence>
<xs:element name="sql-insert" minOccurs="0" type="CustomSqlDmlType"/>
<xs:element name="sql-update" minOccurs="0" type="CustomSqlDmlType"/>
<xs:element name="sql-delete" minOccurs="0" type="CustomSqlDmlType"/>
<xs:element name="sql-delete-all" minOccurs="0" type="CustomSqlDmlType"/>
</xs:sequence>
</xs:group>
<xs:complexType name="CustomSqlDmlType" mixed="true">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="callable" default="false" type="xs:boolean"/>
<xs:attribute name="check" type="ResultCheckStyleEnum"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:attributeGroup name="plural-basic-attribute-group">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="access" type="xs:string"/>
<xs:attribute name="check" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="where" type="xs:string"/>
<!-- default: none -->
<xs:attribute name="cascade" type="xs:string"/>
<xs:attribute name="batch-size" default="-1" type="xs:int"/>
<xs:attribute name="inverse" default="false" type="xs:boolean"/>
<xs:attribute name="mutable" default="true" type="xs:boolean"/>
<xs:attribute name="optimistic-lock" default="true" type="xs:boolean"/>
<!-- only supported for properties of a class (not component) -->
<xs:attribute name="collection-type" type="xs:string"/>
<xs:attribute name="persister" type="ClassNameType"/>
</xs:attributeGroup>
<xs:attributeGroup name="table-information-group">
<xs:attribute name="schema" type="xs:string"/>
<xs:attribute name="catalog" type="xs:string"/>
<xs:attribute name="table" type="xs:string"/>
<!-- default: unqualified class name -->
<xs:attribute name="subselect" type="xs:string"/>
</xs:attributeGroup>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Enums -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<xs:simpleType name="CacheInclusionEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="all"/>
<xs:enumeration value="non-lazy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CacheModeEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="get"/>
<xs:enumeration value="ignore"/>
<xs:enumeration value="normal"/>
<xs:enumeration value="put"/>
<xs:enumeration value="refresh"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CacheUsageEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="nonstrict-read-write"/>
<xs:enumeration value="read-only"/>
<xs:enumeration value="read-write"/>
<xs:enumeration value="transactional"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ResultCheckStyleEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="none"/>
<xs:enumeration value="param"/>
<xs:enumeration value="rowcount"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EntityModeEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="dynamic-map"/>
<xs:enumeration value="pojo"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FetchStyleEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="join"/>
<xs:enumeration value="select"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FetchStyleWithSubselectEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="join"/>
<xs:enumeration value="select"/>
<xs:enumeration value="subselect"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FlushModeEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="always"/>
<xs:enumeration value="auto"/>
<xs:enumeration value="never"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="GenerationTimingEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="always"/>
<xs:enumeration value="insert"/>
<xs:enumeration value="never"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="GenerationTimingVersionEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="always"/>
<xs:enumeration value="never"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LazyEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="false"/>
<xs:enumeration value="proxy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LazyWithExtraEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="extra"/>
<xs:enumeration value="false"/>
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LazyWithNoProxyEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="false"/>
<xs:enumeration value="no-proxy"/>
<xs:enumeration value="proxy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LockModeEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="none"/>
<xs:enumeration value="read"/>
<xs:enumeration value="upgrade"/>
<xs:enumeration value="upgrade-nowait"/>
<xs:enumeration value="upgrade-skiplocked"/>
<xs:enumeration value="write"/>
<xs:enumeration value="force"/>
<xs:enumeration value="optimistic"/>
<xs:enumeration value="optimistic_force_increment"/>
<xs:enumeration value="pessimistic_read"/>
<xs:enumeration value="pessimistic_write"/>
<xs:enumeration value="pessimistic_force_increment"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NotFoundEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="exception"/>
<xs:enumeration value="ignore"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OuterJoinEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="auto"/>
<xs:enumeration value="false"/>
<xs:enumeration value="true"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OnDeleteEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="cascade"/>
<xs:enumeration value="noaction"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OptimisticLockStyleEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="all"/>
<xs:enumeration value="dirty"/>
<xs:enumeration value="none"/>
<xs:enumeration value="version"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PolymorphismEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="explicit"/>
<xs:enumeration value="implicit"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TimestampSourceEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="db"/>
<xs:enumeration value="vm"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UnsavedValueCompositeIdEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="any"/>
<xs:enumeration value="none"/>
<xs:enumeration value="undefined"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UnsavedValueTimestampEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="null"/>
<xs:enumeration value="undefined"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UnsavedValueVersionEnum">
<xs:restriction base="xs:token">
<xs:enumeration value="negative"/>
<xs:enumeration value="null"/>
<xs:enumeration value="undefined"/>
</xs:restriction>
</xs:simpleType>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Support types -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<xs:simpleType name="ClassNameType">
<xs:annotation>
<xs:documentation>
Define a class name type which can be used in the attribute value which requires a class name,
either qualified or not, time to do the validation.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>