javax.persistence preview - Draft 8 (Also Draft 2 of orm2_1.xsd)
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 3f94b60..e68a843 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF
@@ -1,23 +1,23 @@ Manifest-Version: 1.0 -Export-Package: javax.persistence;jpa="2.0";version="2.0.101", - javax.persistence.criteria;jpa="2.0";version="2.0.101", - javax.persistence.metamodel;jpa="2.0";version="2.0.101", - javax.persistence.spi;jpa="2.0";version="2.0.101", +Export-Package: javax.persistence;jpa="2.0";version="2.0.102", + javax.persistence.criteria;jpa="2.0";version="2.0.102", + javax.persistence.metamodel;jpa="2.0";version="2.0.102", + javax.persistence.spi;jpa="2.0";version="2.0.102", org.osgi.service.jpa;version="1.0.0" -Implementation-Version: 2.0.101 +Implementation-Version: 2.0.102 Bundle-ClassPath: . Specification-Vendor: Oracle -Bundle-Name: Java Persistence API 2.1 -Created-By: 1.6.0_26 (Sun Microsystems Inc.) +Bundle-Name: Java Persistence API 2.1 preview +Created-By: 1.6.0_35 (Sun Microsystems Inc.) Bundle-RequiredExecutionEnvironment: J2SE-1.5 Implementation-Vendor: Eclipse.org - EclipseLink Project Bundle-Vendor: Eclipse.org - EclipseLink Project -Bundle-Version: 2.0.101.v201206221654 +Bundle-Version: 2.0.102.v201209201404 Bundle-ManifestVersion: 2 Bundle-Activator: org.eclipse.persistence.javax.persistence.osgi.Activator Import-Package: javax.sql;resolution:=optional, org.osgi.framework;resolution:=optional, org.osgi.service.jpa;version="1.0.0" -Specification-Version: 2.1 +Specification-Version: 2.1 Draft 8 Bundle-SymbolicName: javax.persistence
diff --git a/antbuild.xml b/antbuild.xml index 95b1dc2..aad3577 100644 --- a/antbuild.xml +++ b/antbuild.xml
@@ -58,9 +58,9 @@ <property name="jpaproto.qualifier" value="v${jpaproto.build.date}${jpaproto.build.time}"/> <property name="jpaproto.spec.vendor" value="Oracle"/> <property name="implementation.vendor" value="Eclipse.org - EclipseLink Project"/> - <property name="jpaproto.spec.version" value="2.1"/> - <property name="jpaproto.version" value="2.0.101"/> - <property name="jpaproto.bundle.name" value="Java Persistence API 2.1"/> + <property name="jpaproto.spec.version" value="2.1 Draft 8"/> + <property name="jpaproto.version" value="2.0.102"/> + <property name="jpaproto.bundle.name" value="Java Persistence API 2.1 preview"/> <!-- Project infrastructure properties --> <property name="src.dir" value="src"/> <property name="package.dir" value=".."/>
diff --git a/src/javax/persistence/AttributeConverter.java b/src/javax/persistence/AttributeConverter.java new file mode 100644 index 0000000..9860ef6 --- /dev/null +++ b/src/javax/persistence/AttributeConverter.java
@@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2012 Oracle Corporation. 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: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package javax.persistence; + +/** + * A class that implements this interface can be used to convert + * entity attribute state into database column representation + * and back again. + * Note that the X and Y types may be the same Java type. + * + * @param <X> the type of the entity attribute + * @param <Y> the type of the database column + */ +public interface AttributeConverter<X,Y> { + + /** + * Converts the value stored in the entity attribute into the + * data representation to be stored in the database. + * + * @param attribute the entity attribute value to be converted + * @return the converted data to be stored in the database + * column + */ + public Y convertToDatabaseColumn (X attribute); + + /** + * Converts the data stored in the database column into the + * value to be stored in the entity attribute. + * Note that it is the responsibility of the converter writer to + * specify the correct <code>dbData</code> type for the corresponding + * column for use by the JDBC driver: i.e., persistence providers are + * not expected to do such type conversion. + * + * @param dbData the data from the database column to be + * converted + * @return the converted value to be stored in the entity + * attribute + */ + public X convertToEntityAttribute (Y dbData); +}
diff --git a/src/javax/persistence/CollectionTable.java b/src/javax/persistence/CollectionTable.java index 03c59d7..1e3a483 100644 --- a/src/javax/persistence/CollectionTable.java +++ b/src/javax/persistence/CollectionTable.java
@@ -144,4 +144,12 @@ * table. These are only used if table generation is in effect. */ UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. + * + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; }
diff --git a/src/javax/persistence/EntityManagerFactory.java b/src/javax/persistence/EntityManagerFactory.java index 375dd9b..5932f80 100644 --- a/src/javax/persistence/EntityManagerFactory.java +++ b/src/javax/persistence/EntityManagerFactory.java
@@ -59,13 +59,29 @@ /** * Create a new JTA application-managed <code>EntityManager</code> with the + * specified synchronization type. + * This method returns a new <code>EntityManager</code> instance each time + * it is invoked. + * The <code>isOpen</code> method will return true on the returned instance. + * @param synchronizationType how and when the entity manager should be + * synchronized with the current JTA transaction + * @return entity manager instance + * @throws IllegalStateException if the entity manager factory + * has been configured for resource-local entity managers or is closed + * + * @since Java Persistence 2.1 + */ + public EntityManager createEntityManager(SynchronizationType synchronizationType); + + /** + * Create a new JTA application-managed <code>EntityManager</code> with the * specified synchronization type and map of properties. * This method returns a new <code>EntityManager</code> instance each time * it is invoked. * The <code>isOpen</code> method will return true on the returned instance. * @param synchronizationType how and when the entity manager should be * synchronized with the current JTA transaction - * @param map properties for entity manager; may be null + * @param map properties for entity manager * @return entity manager instance * @throws IllegalStateException if the entity manager factory * has been configured for resource-local entity managers or is closed
diff --git a/src/javax/persistence/ForeignKey.java b/src/javax/persistence/ForeignKey.java new file mode 100644 index 0000000..1c54ae3 --- /dev/null +++ b/src/javax/persistence/ForeignKey.java
@@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2012 Oracle Corporation. 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: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package javax.persistence; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Used in schema generation to override the persistence provider's + * default foreign key strategy. + * It is used to define a foreign key constraint or to otherwise + * override or disable the persistence provider's default foreign key + * definition. + * <p> + * The syntax used in the <code>foreignKeyDefinition</code> element + * should follow the SQL syntax used by the target database for foreign + * key constraints. For example, this may be similar the following: + * <p> + * <pre> + * FOREIGN KEY ( <COLUMN expression> {, <COLUMN expression>}... ) + * REFERENCES <TABLE identifier> [ + * (<COLUMN expression> {, <COLUMN expression>}... ) ] + * [ ON UPDATE <referential action> ] + * [ ON DELETE <referential action> ] + * </pre> + * + * If <code>disableForeignKey</code> is <code>true</code>, the + * persistence provider must not generate a foreign key constraint. + * + * @see JoinColumn + * @see JoinColumns + * @see MapKeyJoinColumn + * @see MapKeyJoinColumns + * @see PrimaryKeyJoinColumn + * @see PrimaryKeyJoinColumns + * + * @since Java Persistence 2.1 + */ +@Target({}) +@Retention(RUNTIME) +public @interface ForeignKey { + + /** + * (Optional) The name of the foreign key constraint. If this + * is not specified, it defaults to a provider-generated name. + */ + String name() default ""; + + /** + * (Optional) The foreign key constraint definition. If this + * is not specified, and disableForeignKey is false, the + * persistence provider's default foreign key strategy will apply. + */ + String foreignKeyDefinition() default ""; + + /** + * (Optional) Used to specify that the persistence provider should not + * generate a foreign key constraint. + */ + boolean disableForeignKey() default false; +}
diff --git a/src/javax/persistence/Index.java b/src/javax/persistence/Index.java new file mode 100644 index 0000000..29a598a --- /dev/null +++ b/src/javax/persistence/Index.java
@@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2012 Oracle Corporation. 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: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package javax.persistence; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Used in schema generation to specify creation of an index. + * <p> + * Note that it is not necessary to specify an index for a primary key, + * as the primary key index will be created automatically. + * + * <p> + * The syntax of the <code>columnList</code> element is a + * <code>column_list</code>, as follows: + * + * <pre> + * column::= index_column [,index_column]* + * index_column::= column_name [ASC | DESC] + * </pre> + * + * <p> If <code>ASC</code> or <code>DESC</code> is not specified, + * <code>ASC</code> (ascending order) is assumed. + * + * @see Table + * @see SecondaryTable + * @see CollectionTable + * @see JoinTable + * @see TableGenerator + * + * @since Java Persistence 2.1 + * + */ +@Target({}) +@Retention(RUNTIME) +public @interface Index { + + /** + * (Optional) The name of the index; defaults to a provider-generated name. + */ + String name() default ""; + + /** + * (Required) The names of the columns to be included in the index, + * in order. + */ + String columnList(); + + /** + * (Optional) Whether the index is unique. + */ + boolean unique() default false; + +}
diff --git a/src/javax/persistence/JoinColumn.java b/src/javax/persistence/JoinColumn.java index 3515f1a..a894dd3 100644 --- a/src/javax/persistence/JoinColumn.java +++ b/src/javax/persistence/JoinColumn.java
@@ -48,6 +48,7 @@ * @see OneToOne * @see JoinTable * @see CollectionTable + * @see ForeignKey * * @since Java Persistence 1.0 */ @@ -167,4 +168,13 @@ * </ul> */ String table() default ""; + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); }
diff --git a/src/javax/persistence/JoinColumns.java b/src/javax/persistence/JoinColumns.java index cfa9a3d..a752382 100644 --- a/src/javax/persistence/JoinColumns.java +++ b/src/javax/persistence/JoinColumns.java
@@ -41,6 +41,7 @@ * </pre> * * @see JoinColumn + * @see ForeignKey * * @since Java Persistence 1.0 */ @@ -52,4 +53,13 @@ * The join columns that map the relationship. */ JoinColumn[] value(); + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); }
diff --git a/src/javax/persistence/JoinTable.java b/src/javax/persistence/JoinTable.java index 60a3819..efe1de9 100644 --- a/src/javax/persistence/JoinTable.java +++ b/src/javax/persistence/JoinTable.java
@@ -113,4 +113,12 @@ * <p> Defaults to no additional constraints. */ UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. + * + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; }
diff --git a/src/javax/persistence/MapKeyJoinColumn.java b/src/javax/persistence/MapKeyJoinColumn.java index 0e7d214..564f923 100644 --- a/src/javax/persistence/MapKeyJoinColumn.java +++ b/src/javax/persistence/MapKeyJoinColumn.java
@@ -84,6 +84,8 @@ * } * </pre> * + * @see ForeignKey + * * @since Java Persistence 2.0 */ @Target( { METHOD, FIELD }) @@ -178,4 +180,13 @@ * </ul> */ String table() default ""; + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); }
diff --git a/src/javax/persistence/MapKeyJoinColumns.java b/src/javax/persistence/MapKeyJoinColumns.java index 2fc1682..ed3a1c6 100644 --- a/src/javax/persistence/MapKeyJoinColumns.java +++ b/src/javax/persistence/MapKeyJoinColumns.java
@@ -31,6 +31,7 @@ * <code>MapKeyJoinColumn</code> annotations. * * @see MapKeyJoinColumn + * @see ForeignKey * * @since Java Persistence 2.0 */ @@ -42,4 +43,13 @@ * that is the map key. */ MapKeyJoinColumn[] value(); + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); }
diff --git a/src/javax/persistence/Persistence.java b/src/javax/persistence/Persistence.java index 7d482ad..74bdfb8 100644 --- a/src/javax/persistence/Persistence.java +++ b/src/javax/persistence/Persistence.java
@@ -26,7 +26,8 @@ /** * Bootstrap class that is used to obtain an {@link EntityManagerFactory} - * in Java SE environments. + * in Java SE environments. It may also be used to cause schema + * generation to occur. * * <p> The <code>Persistence</code> class is available in a Java EE * container environment as well; however, support for the Java SE @@ -60,9 +61,10 @@ * @param persistenceUnitName * the name of the persistence unit * @param properties - * Additional properties to use when creating the factory. The - * values of these properties override any values that may have - * been configured elsewhere. + * Additional properties to use when creating the factory. + * These properties may include properties to control + * schema generation. The values of these properties override + * any values that may have been configured elsewhere. * @return the factory that creates EntityManagers configured according to * the specified persistence unit. */ @@ -85,6 +87,30 @@ return emf; } + + /** + * Create database schemas and/or tables and/or create DDL + * scripts as determined by the supplied properties. + * <p> + * Called when schema generation is to occur as a separate phase + * from creation of the entity manager factory. + * <p> + * @param persistenceUnitName the name of the persistence unit + * @param map properties for schema generation; these may + * also contain provider-specific properties. The + * value of these properties override any values that + * may have been configured elsewhere.. + * @throws PersistenceException if insufficient or inconsistent + * configuration information is provided of if schema + * generation otherwise fails. + * + * @since Java Persistence 2.1 + */ + public static void generateSchema(String persistenceUnitName, Map map) { + + } + + /** * Return the PersistenceUtil instance * @return PersistenceUtil instance
diff --git a/src/javax/persistence/PrimaryKeyJoinColumn.java b/src/javax/persistence/PrimaryKeyJoinColumn.java index c54d1f0..15c1eb2 100644 --- a/src/javax/persistence/PrimaryKeyJoinColumn.java +++ b/src/javax/persistence/PrimaryKeyJoinColumn.java
@@ -60,6 +60,7 @@ * @see SecondaryTable * @see Inheritance * @see OneToOne + * @see ForeignKey * * @since Java Persistence 1.0 */ @@ -99,4 +100,13 @@ * inferred type. */ String columnDefinition() default ""; + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); }
diff --git a/src/javax/persistence/PrimaryKeyJoinColumns.java b/src/javax/persistence/PrimaryKeyJoinColumns.java index 56c5c1e..9bc9384 100644 --- a/src/javax/persistence/PrimaryKeyJoinColumns.java +++ b/src/javax/persistence/PrimaryKeyJoinColumns.java
@@ -41,6 +41,8 @@ * public class ValuedCustomer extends Customer { ... } * </pre> * + * @see ForeignKey + * * @since Java Persistence 1.0 */ @Target({TYPE, METHOD, FIELD}) @@ -50,4 +52,14 @@ /** One or more <code>PrimaryKeyJoinColumn</code> annotations. */ PrimaryKeyJoinColumn[] value(); + + /** + * (Optional) Used to specify or disable a foreign key constraint when + * table generation is in effect. If this element is not specified, + * the persistence provider's default foreign key strategy will apply. + * + * @since Java Persistence 2.1 + */ + ForeignKey foreignKey() default @ForeignKey(); + }
diff --git a/src/javax/persistence/SecondaryTable.java b/src/javax/persistence/SecondaryTable.java index 8545c80..dfac40c 100644 --- a/src/javax/persistence/SecondaryTable.java +++ b/src/javax/persistence/SecondaryTable.java
@@ -91,4 +91,12 @@ * <p> Defaults to no additional constraints. */ UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. + * + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; }
diff --git a/src/javax/persistence/StoredProcedureQuery.java b/src/javax/persistence/StoredProcedureQuery.java index 187ee49..6470c54 100644 --- a/src/javax/persistence/StoredProcedureQuery.java +++ b/src/javax/persistence/StoredProcedureQuery.java
@@ -184,9 +184,6 @@ /** * Register a named parameter. - * When using parameter names, all parameters must be registered - * in the order in which they occur in the parameter list of the - * stored procedure. * @param parameterName name of the parameter as registered or * specified in metadata * @param type type of the parameter
diff --git a/src/javax/persistence/Table.java b/src/javax/persistence/Table.java index e08ba2e..04c7494 100644 --- a/src/javax/persistence/Table.java +++ b/src/javax/persistence/Table.java
@@ -67,4 +67,14 @@ * <p> Defaults to no additional constraints. */ UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. Note that it is not necessary + * to specify an index for a primary key, as the primary key + * index will be created automatically. + * + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; }
diff --git a/src/javax/persistence/TableGenerator.java b/src/javax/persistence/TableGenerator.java index c93cb1b..89551fe 100644 --- a/src/javax/persistence/TableGenerator.java +++ b/src/javax/persistence/TableGenerator.java
@@ -135,4 +135,14 @@ * <p> Defaults to no additional constraints. */ UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. Note that it is not necessary + * to specify an index for a primary key, as the primary key + * index will be created automatically. + * + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; }
diff --git a/src/javax/persistence/criteria/AbstractQuery.java b/src/javax/persistence/criteria/AbstractQuery.java index 0bc7e01..b1c7d25 100644 --- a/src/javax/persistence/criteria/AbstractQuery.java +++ b/src/javax/persistence/criteria/AbstractQuery.java
@@ -33,7 +33,7 @@ * * @since Java Persistence 2.0 */ -public interface AbstractQuery<T> { +public interface AbstractQuery<T> extends CommonAbstractCriteria { /** * Create and add a query root corresponding to the given entity, @@ -128,13 +128,6 @@ AbstractQuery<T> distinct(boolean distinct); /** - * Create a subquery of the query. - * @param type the subquery result type - * @return subquery - */ - <U> Subquery<U> subquery(Class<U> type); - - /** * Return the query roots. These are the roots that have * been defined for the <code>CriteriaQuery</code> or <code>Subquery</code> itself, * including any subquery roots defined as a result of @@ -152,14 +145,6 @@ Selection<T> getSelection(); /** - * Return the predicate that corresponds to the where clause - * restriction(s), or null if no restrictions have been - * specified. - * @return where clause predicate - */ - Predicate getRestriction(); - - /** * Return a list of the grouping expressions. Returns empty * list if no grouping expressions have been specified. * Modifications to the list do not affect the query.
diff --git a/src/javax/persistence/criteria/CommonAbstractCriteria.java b/src/javax/persistence/criteria/CommonAbstractCriteria.java new file mode 100644 index 0000000..1048cd5 --- /dev/null +++ b/src/javax/persistence/criteria/CommonAbstractCriteria.java
@@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2012 Oracle Corporation. 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: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package javax.persistence.criteria; + +/** + * The <code>CommonAbstractCriteria</code> interface defines functionality + * that is common to both top-level criteria queries and subqueries as + * well as to update and delete criteria operations. + * It is not intended to be used directly in query construction. + * + * <p> Note that criteria queries and criteria update and delete operations + * are typed differently. + * Criteria queries are typed according to the query result type. + * Update and delete operations are typed according to the target of the + * update or delete. + * + * @since Java Persistence 2.1 + */ +public interface CommonAbstractCriteria { + + /** + * Create a subquery of the query. + * @param type the subquery result type + * @return subquery + */ + <U> Subquery<U> subquery(Class<U> type); + + /** + * Return the predicate that corresponds to the where clause + * restriction(s), or null if no restrictions have been + * specified. + * @return where clause predicate + */ + Predicate getRestriction(); + +}
diff --git a/src/javax/persistence/criteria/CriteriaDelete.java b/src/javax/persistence/criteria/CriteriaDelete.java index ba75d0a..1500dc3 100644 --- a/src/javax/persistence/criteria/CriteriaDelete.java +++ b/src/javax/persistence/criteria/CriteriaDelete.java
@@ -31,13 +31,13 @@ * * @since Java Persistence 2.1 */ -public interface CriteriaDelete<T> { +public interface CriteriaDelete<T> extends CommonAbstractCriteria { /** * Create and add a query root corresponding to the entity * that is the target of the delete. - * A <code>CriteriaDelete</code> object has a single root, the object that + * A <code>CriteriaDelete</code> object has a single root, the entity that * is being deleted. * @param entityClass the entity class * @return query root corresponding to the given entity @@ -47,7 +47,7 @@ /** * Create and add a query root corresponding to the entity * that is the target of the delete. - * A <code>CriteriaDelete</code> object has a single root, the object that + * A <code>CriteriaDelete</code> object has a single root, the entity that * is being deleted. * @param entity metamodel entity representing the entity * of type X @@ -62,39 +62,24 @@ Root<T> getRoot(); /** - * Modify the query to restrict the target of the deletion + * Modify the delete query to restrict the target of the deletion * according to the specified boolean expression. * Replaces the previously added restriction(s), if any. * @param restriction a simple or compound boolean expression - * @return the modified query + * @return the modified delete query */ CriteriaDelete<T> where(Expression<Boolean> restriction); /** - * Modify the query to restrict the target of the deletion + * Modify the delete query to restrict the target of the deletion * according to the conjunction of the specified restriction * predicates. * Replaces the previously added restriction(s), if any. * If no restrictions are specified, any previously added * restrictions are simply removed. * @param restrictions zero or more restriction predicates - * @return the modified query + * @return the modified delete query */ CriteriaDelete<T> where(Predicate... restrictions); - /** - * Create a subquery of the query. - * @param type the subquery result type - * @return subquery - */ - <U> Subquery<U> subquery(Class<U> type); - - /** - * Return the predicate that corresponds to the where clause - * restriction(s), or null if no restrictions have been - * specified. - * @return where clause predicate - */ - Predicate getRestriction(); - }
diff --git a/src/javax/persistence/criteria/CriteriaUpdate.java b/src/javax/persistence/criteria/CriteriaUpdate.java index 992be47..e62ceae 100644 --- a/src/javax/persistence/criteria/CriteriaUpdate.java +++ b/src/javax/persistence/criteria/CriteriaUpdate.java
@@ -36,12 +36,12 @@ * * @since Java Persistence 2.1 */ -public interface CriteriaUpdate<T> { +public interface CriteriaUpdate<T> extends CommonAbstractCriteria { /** * Create and add a query root corresponding to the entity * that is the target of the update. - * A <code>CriteriaUpdate</code> object has a single root, the object that + * A <code>CriteriaUpdate</code> object has a single root, the entity that * is being updated. * @param entityClass the entity class * @return query root corresponding to the given entity @@ -51,7 +51,7 @@ /** * Create and add a query root corresponding to the entity * that is the target of the update. - * A <code>CriteriaUpdate</code> object has a single root, the object that + * A <code>CriteriaUpdate</code> object has a single root, the entity that * is being updated. * @param entity metamodel entity representing the entity * of type X @@ -69,7 +69,7 @@ * Update the value of the specified attribute. * @param attribute attribute to be updated * @param value new value - * @return the modified query + * @return the modified update query */ <Y, X extends Y> CriteriaUpdate<T> set( SingularAttribute<? super T, Y> attribute, X value); @@ -77,7 +77,7 @@ * Update the value of the specified attribute. * @param attribute attribute to be updated * @param value new value - * @return the modified query + * @return the modified update query */ <Y> CriteriaUpdate<T> set( SingularAttribute<? super T, Y> attribute, Expression<? extends Y> value); @@ -85,7 +85,7 @@ * Update the value of the specified attribute. * @param attribute attribute to be updated * @param value new value - * @return the modified query + * @return the modified update query */ <Y, X extends Y> CriteriaUpdate<T> set(Path<Y> attribute, X value); @@ -93,7 +93,7 @@ * Update the value of the specified attribute. * @param attribute attribute to be updated * @param value new value - * @return the modified query + * @return the modified update query */ <Y> CriteriaUpdate<T> set(Path<Y> attribute, Expression<? extends Y> value); @@ -101,44 +101,28 @@ * Update the value of the specified attribute. * @param attributeName name of the attribute to be updated * @param value new value - * @return the modified query + * @return the modified update query */ CriteriaUpdate<T> set(String attributeName, Object value); /** - * Modify the query to restrict the target of the update + * Modify the update query to restrict the target of the update * according to the specified boolean expression. * Replaces the previously added restriction(s), if any. * @param restriction a simple or compound boolean expression - * @return the modified query + * @return the modified update query */ CriteriaUpdate<T> where(Expression<Boolean> restriction); /** - * Modify the query to restrict the target of the update + * Modify the update query to restrict the target of the update * according to the conjunction of the specified restriction * predicates. * Replaces the previously added restriction(s), if any. * If no restrictions are specified, any previously added * restrictions are simply removed. * @param restrictions zero or more restriction predicates - * @return the modified query + * @return the modified update query */ CriteriaUpdate<T> where(Predicate... restrictions); - - /** - * Create a subquery of the query. - * @param type the subquery result type - * @return subquery - */ - <U> Subquery<U> subquery(Class<U> type); - - /** - * Return the predicate that corresponds to the where clause - * restriction(s), or null if no restrictions have been - * specified. - * @return where clause predicate - */ - Predicate getRestriction(); - }
diff --git a/src/javax/persistence/criteria/Subquery.java b/src/javax/persistence/criteria/Subquery.java index 193348d..218c749 100644 --- a/src/javax/persistence/criteria/Subquery.java +++ b/src/javax/persistence/criteria/Subquery.java
@@ -1,18 +1,18 @@ /******************************************************************************* - * Copyright (c) 2008, 2009 Sun Microsystems. 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: - * Linda DeMichiel - Java Persistence 2.0 - Version 2.0 (October 1, 2009) - * Specification available from http://jcp.org/en/jsr/detail?id=317 + * Copyright (c) 2008 - 2012 Oracle Corporation. 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: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ package javax.persistence.criteria; import java.util.List; @@ -179,9 +179,19 @@ /** * Return the query of which this is a subquery. + * This must be a CriteriaQuery or a Subquery. * @return the enclosing query or subquery */ AbstractQuery<?> getParent(); + + /** + * Return the query of which this is a subquery. + * This may be a CriteriaQuery, CriteriaUpdate, CriteriaDelete, + * or a Subquery. + * @return the enclosing query or subquery + * @since Java Persistence 2.1 + */ + CommonAbstractCriteria getContainingQuery(); /** * Return the selection expression.
diff --git a/src/javax/persistence/orm_2_1.xsd b/src/javax/persistence/orm_2_1.xsd new file mode 100644 index 0000000..cbc5185 --- /dev/null +++ b/src/javax/persistence/orm_2_1.xsd
@@ -0,0 +1,2232 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Java Persistence API object/relational mapping file schema --> +<xsd:schema targetNamespace="http://java.sun.com/xml/ns/persistence/orm" + xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified" + attributeFormDefault="unqualified" + version="2.1"> + + <xsd:annotation> + <xsd:documentation> + @(#)orm_2_1.xsd 2.1 September 12 2012 + </xsd:documentation> + </xsd:annotation> + + <xsd:annotation> + <xsd:documentation> + + Copyright (c) 2008 - 2012 Oracle Corporation. 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: + Linda DeMichiel - Java Persistence 2.1, Version 2.1 (September 12, 2012) + Specification available from http://jcp.org/en/jsr/detail?id=338 + + </xsd:documentation> + </xsd:annotation> + + <xsd:annotation> + <xsd:documentation><![CDATA[ + + This is the XML Schema for the persistence object/relational + mapping file. + The file may be named "META-INF/orm.xml" in the persistence + archive or it may be named some other name which would be + used to locate the file as resource on the classpath. + + Object/relational mapping files must indicate the object/relational + mapping file schema by using the persistence namespace: + + http://java.sun.com/xml/ns/persistence + + and indicate the version of the schema by + using the version element as shown below: + + <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm + http://java.sun.com/xml/ns/persistence/orm_2_1.xsd" + version="2.1"> + ... + </entity-mappings> + + + ]]></xsd:documentation> + </xsd:annotation> + + <xsd:complexType name="emptyType"/> + + <xsd:simpleType name="versionType"> + <xsd:restriction base="xsd:token"> + <xsd:pattern value="[0-9]+(\.[0-9]+)*"/> + </xsd:restriction> + </xsd:simpleType> + + <!-- **************************************************** --> + + <xsd:element name="entity-mappings"> + <xsd:complexType> + <xsd:annotation> + <xsd:documentation> + + The entity-mappings element is the root element of a mapping + file. It contains the following four types of elements: + + 1. The persistence-unit-metadata element contains metadata + for the entire persistence unit. It is undefined if this element + occurs in multiple mapping files within the same persistence unit. + + 2. The package, schema, catalog and access elements apply to all of + the entity, mapped-superclass and embeddable elements defined in + the same file in which they occur. + + 3. The sequence-generator, table-generator, converter, named-query, + named-native-query, named-stored-procedure-query, and + sql-result-set-mapping elements are global to the persistence + unit. It is undefined to have more than one sequence-generator + or table-generator of the same name in the same or different + mapping files in a persistence unit. It is undefined to have + more than one named-query, named-native-query, sql-result-set-mapping, + or named-stored-procedure-query of the same name in the same + or different mapping files in a persistence unit. It is also + undefined to have more than one converter for the same target + type in the same or different mapping files in a persistence unit. + + 4. The entity, mapped-superclass and embeddable elements each define + the mapping information for a managed persistent class. The mapping + information contained in these elements may be complete or it may + be partial. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" + minOccurs="0"/> + <xsd:element name="persistence-unit-metadata" + type="orm:persistence-unit-metadata" + minOccurs="0"/> + <xsd:element name="package" type="xsd:string" + minOccurs="0"/> + <xsd:element name="schema" type="xsd:string" + minOccurs="0"/> + <xsd:element name="catalog" type="xsd:string" + minOccurs="0"/> + <xsd:element name="access" type="orm:access-type" + minOccurs="0"/> + <xsd:element name="sequence-generator" type="orm:sequence-generator" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="table-generator" type="orm:table-generator" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="named-query" type="orm:named-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="named-native-query" type="orm:named-native-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="named-stored-procedure-query" + type="orm:named-stored-procedure-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="sql-result-set-mapping" + type="orm:sql-result-set-mapping" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="mapped-superclass" type="orm:mapped-superclass" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="entity" type="orm:entity" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="embeddable" type="orm:embeddable" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="converter" type="orm:converter" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="version" type="orm:versionType" + fixed="2.1" use="required"/> + </xsd:complexType> + </xsd:element> + + <!-- **************************************************** --> + + <xsd:complexType name="persistence-unit-metadata"> + <xsd:annotation> + <xsd:documentation> + + Metadata that applies to the persistence unit and not just to + the mapping file in which it is contained. + + If the xml-mapping-metadata-complete element is specified, + the complete set of mapping metadata for the persistence unit + is contained in the XML mapping files for the persistence unit. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="xml-mapping-metadata-complete" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="persistence-unit-defaults" + type="orm:persistence-unit-defaults" + minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <!-- **************************************************** --> + + <xsd:complexType name="persistence-unit-defaults"> + <xsd:annotation> + <xsd:documentation> + + These defaults are applied to the persistence unit as a whole + unless they are overridden by local annotation or XML + element settings. + + schema - Used as the schema for all tables, secondary tables, join + tables, collection tables, sequence generators, and table + generators that apply to the persistence unit + catalog - Used as the catalog for all tables, secondary tables, join + tables, collection tables, sequence generators, and table + generators that apply to the persistence unit + delimited-identifiers - Used to treat database identifiers as + delimited identifiers. + access - Used as the access type for all managed classes in + the persistence unit + cascade-persist - Adds cascade-persist to the set of cascade options + in all entity relationships of the persistence unit + entity-listeners - List of default entity listeners to be invoked + on each entity in the persistence unit. + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="schema" type="xsd:string" + minOccurs="0"/> + <xsd:element name="catalog" type="xsd:string" + minOccurs="0"/> + <xsd:element name="delimited-identifiers" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="access" type="orm:access-type" + minOccurs="0"/> + <xsd:element name="cascade-persist" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="entity-listeners" type="orm:entity-listeners" + minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + + <!-- **************************************************** --> + + <xsd:complexType name="entity"> + <xsd:annotation> + <xsd:documentation> + + Defines the settings and mappings for an entity. Is allowed to be + sparsely populated and used in conjunction with the annotations. + Alternatively, the metadata-complete attribute can be used to + indicate that no annotations on the entity class (and its fields + or properties) are to be processed. If this is the case then + the defaulting rules for the entity and its subelements will + be recursively applied. + + @Target(TYPE) @Retention(RUNTIME) + public @interface Entity { + String name() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="table" type="orm:table" + minOccurs="0"/> + <xsd:element name="secondary-table" type="orm:secondary-table" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:sequence> + <xsd:element name="primary-key-join-column" + type="orm:primary-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="primary-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/> + <xsd:element name="inheritance" type="orm:inheritance" minOccurs="0"/> + <xsd:element name="discriminator-value" type="orm:discriminator-value" + minOccurs="0"/> + <xsd:element name="discriminator-column" + type="orm:discriminator-column" + minOccurs="0"/> + <xsd:element name="sequence-generator" type="orm:sequence-generator" + minOccurs="0"/> + <xsd:element name="table-generator" type="orm:table-generator" + minOccurs="0"/> + <xsd:element name="named-query" type="orm:named-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="named-native-query" type="orm:named-native-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="named-stored-procedure-query" + type="orm:named-stored-procedure-query" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="sql-result-set-mapping" + type="orm:sql-result-set-mapping" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="exclude-default-listeners" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="exclude-superclass-listeners" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="entity-listeners" type="orm:entity-listeners" + minOccurs="0"/> + <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/> + <xsd:element name="post-persist" type="orm:post-persist" + minOccurs="0"/> + <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/> + <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/> + <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/> + <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/> + <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/> + <xsd:element name="attribute-override" type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="association-override" + type="orm:association-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="class" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="cacheable" type="xsd:boolean"/> + <xsd:attribute name="metadata-complete" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="access-type"> + <xsd:annotation> + <xsd:documentation> + + This element determines how the persistence provider accesses the + state of an entity or embedded object. + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="PROPERTY"/> + <xsd:enumeration value="FIELD"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="association-override"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface AssociationOverride { + String name(); + JoinColumn[] joinColumns() default{}; + JoinTable joinTable() default @JoinTable; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:choice> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="join-table" type="orm:join-table" + minOccurs="0"/> + </xsd:choice> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="attribute-override"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface AttributeOverride { + String name(); + Column column(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="column" type="orm:column"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="attributes"> + <xsd:annotation> + <xsd:documentation> + + This element contains the entity field or property mappings. + It may be sparsely populated to include only a subset of the + fields or properties. If metadata-complete for the entity is true + then the remainder of the attributes will be defaulted according + to the default rules. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:choice> + <xsd:element name="id" type="orm:id" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="embedded-id" type="orm:embedded-id" + minOccurs="0"/> + </xsd:choice> + <xsd:element name="basic" type="orm:basic" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="version" type="orm:version" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="many-to-one" type="orm:many-to-one" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="one-to-many" type="orm:one-to-many" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="one-to-one" type="orm:one-to-one" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="many-to-many" type="orm:many-to-many" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="element-collection" type="orm:element-collection" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="embedded" type="orm:embedded" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="transient" type="orm:transient" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="basic"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Basic { + FetchType fetch() default EAGER; + boolean optional() default true; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="column" type="orm:column" minOccurs="0"/> + <xsd:choice> + <xsd:element name="lob" type="orm:lob" minOccurs="0"/> + <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/> + <xsd:element name="enumerated" type="orm:enumerated" minOccurs="0"/> + <xsd:element name="convert" type="orm:convert" minOccurs="0"/> + </xsd:choice> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="optional" type="xsd:boolean"/> + <xsd:attribute name="access" type="orm:access-type"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="cascade-type"> + <xsd:annotation> + <xsd:documentation> + + public enum CascadeType { ALL, PERSIST, MERGE, REMOVE, REFRESH, DETACH}; + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="cascade-all" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="cascade-persist" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="cascade-merge" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="cascade-remove" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="cascade-refresh" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="cascade-detach" type="orm:emptyType" + minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="collection-table"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface CollectionTable { + String name() default ""; + String catalog() default ""; + String schema() default ""; + JoinColumn[] joinColumns() default {}; + UniqueConstraint[] uniqueConstraints() default {}; + Index[] indexes() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="unique-constraint" type="orm:unique-constraint" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="index" type="orm:index" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="column"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Column { + String name() default ""; + boolean unique() default false; + boolean nullable() default true; + boolean insertable() default true; + boolean updatable() default true; + String columnDefinition() default ""; + String table() default ""; + int length() default 255; + int precision() default 0; // decimal precision + int scale() default 0; // decimal scale + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="unique" type="xsd:boolean"/> + <xsd:attribute name="nullable" type="xsd:boolean"/> + <xsd:attribute name="insertable" type="xsd:boolean"/> + <xsd:attribute name="updatable" type="xsd:boolean"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + <xsd:attribute name="table" type="xsd:string"/> + <xsd:attribute name="length" type="xsd:int"/> + <xsd:attribute name="precision" type="xsd:int"/> + <xsd:attribute name="scale" type="xsd:int"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="column-result"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface ColumnResult { + String name(); + Class type() default void.class; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="class" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="constructor-result"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface ConstructorResult { + Class targetClass(); + ColumnResult[] columns(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="column" type="orm:column-result" + maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="target-class" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="convert"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface Convert { + Class converter() default void.class; + String attributeName() default ""; + boolean disableConversion() default false; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="converter" type="xsd:string"/> + <xsd:attribute name="attribute-name" type="xsd:string"/> + <xsd:attribute name="disable-conversion" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="converter"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface Converter { + boolean autoApply() default false; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="class" type="xsd:string" use="required"/> + <xsd:attribute name="auto-apply" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="discriminator-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface DiscriminatorColumn { + String name() default "DTYPE"; + DiscriminatorType discriminatorType() default STRING; + String columnDefinition() default ""; + int length() default 31; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="discriminator-type" type="orm:discriminator-type"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + <xsd:attribute name="length" type="xsd:int"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="discriminator-type"> + <xsd:annotation> + <xsd:documentation> + + public enum DiscriminatorType { STRING, CHAR, INTEGER }; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="STRING"/> + <xsd:enumeration value="CHAR"/> + <xsd:enumeration value="INTEGER"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:simpleType name="discriminator-value"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface DiscriminatorValue { + String value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="element-collection"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface ElementCollection { + Class targetClass() default void.class; + FetchType fetch() default LAZY; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:element name="order-by" type="orm:order-by" + minOccurs="0"/> + <xsd:element name="order-column" type="orm:order-column" + minOccurs="0"/> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key" type="orm:map-key" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-class" type="orm:map-key-class" + minOccurs="0"/> + <xsd:choice> + <xsd:element name="map-key-temporal" + type="orm:temporal" + minOccurs="0"/> + <xsd:element name="map-key-enumerated" + type="orm:enumerated" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-attribute-override" + type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key-column" + type="orm:map-key-column" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-join-column" + type="orm:map-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + </xsd:choice> + </xsd:sequence> + </xsd:choice> + <xsd:choice> + <xsd:sequence> + <xsd:element name="column" type="orm:column" minOccurs="0"/> + <xsd:choice> + <xsd:element name="temporal" + type="orm:temporal" + minOccurs="0"/> + <xsd:element name="enumerated" + type="orm:enumerated" + minOccurs="0"/> + <xsd:element name="lob" + type="orm:lob" + minOccurs="0"/> + </xsd:choice> + </xsd:sequence> + <xsd:sequence> + <xsd:element name="attribute-override" + type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="association-override" + type="orm:association-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:choice> + <xsd:element name="collection-table" type="orm:collection-table" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="target-class" type="xsd:string"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="access" type="orm:access-type"/> +</xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="embeddable"> + <xsd:annotation> + <xsd:documentation> + + Defines the settings and mappings for embeddable objects. Is + allowed to be sparsely populated and used in conjunction with + the annotations. Alternatively, the metadata-complete attribute + can be used to indicate that no annotations are to be processed + in the class. If this is the case then the defaulting rules will + be recursively applied. + + @Target({TYPE}) @Retention(RUNTIME) + public @interface Embeddable {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="attributes" type="orm:embeddable-attributes" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="class" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="metadata-complete" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="embeddable-attributes"> + <xsd:sequence> + <xsd:element name="basic" type="orm:basic" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="many-to-one" type="orm:many-to-one" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="one-to-many" type="orm:one-to-many" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="one-to-one" type="orm:one-to-one" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="many-to-many" type="orm:many-to-many" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="element-collection" type="orm:element-collection" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="embedded" type="orm:embedded" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="transient" type="orm:transient" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + + <!-- **************************************************** --> + + <xsd:complexType name="embedded"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Embedded {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="attribute-override" type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="association-override" + type="orm:association-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="embedded-id"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface EmbeddedId {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="attribute-override" type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="entity-listener"> + <xsd:annotation> + <xsd:documentation> + + Defines an entity listener to be invoked at lifecycle events + for the entities that list this listener. + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/> + <xsd:element name="post-persist" type="orm:post-persist" + minOccurs="0"/> + <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/> + <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/> + <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/> + <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/> + <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="class" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="entity-listeners"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface EntityListeners { + Class[] value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="entity-listener" type="orm:entity-listener" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="entity-result"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface EntityResult { + Class entityClass(); + FieldResult[] fields() default {}; + String discriminatorColumn() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="field-result" type="orm:field-result" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="entity-class" type="xsd:string" use="required"/> + <xsd:attribute name="discriminator-column" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="enum-type"> + <xsd:annotation> + <xsd:documentation> + + public enum EnumType { + ORDINAL, + STRING + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="ORDINAL"/> + <xsd:enumeration value="STRING"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:simpleType name="enumerated"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Enumerated { + EnumType value() default ORDINAL; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="orm:enum-type"/> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:simpleType name="fetch-type"> + <xsd:annotation> + <xsd:documentation> + + public enum FetchType { LAZY, EAGER }; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="LAZY"/> + <xsd:enumeration value="EAGER"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="field-result"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface FieldResult { + String name(); + String column(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="column" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="foreign-key"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface ForeignKey { + String name() default ""; + String foreign-key-definition() default ""; + boolean disable-foreign-key() default false; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="foreign-key-definition" type="xsd:string"/> + <xsd:attribute name="disable-foreign-key" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="generated-value"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface GeneratedValue { + GenerationType strategy() default AUTO; + String generator() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="strategy" type="orm:generation-type"/> + <xsd:attribute name="generator" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="generation-type"> + <xsd:annotation> + <xsd:documentation> + + public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO }; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="TABLE"/> + <xsd:enumeration value="SEQUENCE"/> + <xsd:enumeration value="IDENTITY"/> + <xsd:enumeration value="AUTO"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="id"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Id {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="column" type="orm:column" + minOccurs="0"/> + <xsd:element name="generated-value" type="orm:generated-value" + minOccurs="0"/> + <xsd:element name="temporal" type="orm:temporal" + minOccurs="0"/> + <xsd:element name="table-generator" type="orm:table-generator" + minOccurs="0"/> + <xsd:element name="sequence-generator" type="orm:sequence-generator" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="id-class"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface IdClass { + Class value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="class" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="index"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface Index { + String name() default ""; + String columnList(); + boolean unique() default false; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="column-list" type="xsd:string" use="required"/> + <xsd:attribute name="unique" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="inheritance"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface Inheritance { + InheritanceType strategy() default SINGLE_TABLE; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="strategy" type="orm:inheritance-type"/> + </xsd:complexType> + + <!-- **************************************************** --> + + <xsd:simpleType name="inheritance-type"> + <xsd:annotation> + <xsd:documentation> + + public enum InheritanceType + { SINGLE_TABLE, JOINED, TABLE_PER_CLASS}; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="SINGLE_TABLE"/> + <xsd:enumeration value="JOINED"/> + <xsd:enumeration value="TABLE_PER_CLASS"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="join-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface JoinColumn { + String name() default ""; + String referencedColumnName() default ""; + boolean unique() default false; + boolean nullable() default true; + boolean insertable() default true; + boolean updatable() default true; + String columnDefinition() default ""; + String table() default ""; + ForeignKey foreignKey() default @ForeignKey(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="referenced-column-name" type="xsd:string"/> + <xsd:attribute name="unique" type="xsd:boolean"/> + <xsd:attribute name="nullable" type="xsd:boolean"/> + <xsd:attribute name="insertable" type="xsd:boolean"/> + <xsd:attribute name="updatable" type="xsd:boolean"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + <xsd:attribute name="table" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="join-table"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface JoinTable { + String name() default ""; + String catalog() default ""; + String schema() default ""; + JoinColumn[] joinColumns() default {}; + JoinColumn[] inverseJoinColumns() default {}; + UniqueConstraint[] uniqueConstraints() default {}; + Index[] indexes() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:sequence> + <xsd:element name="inverse-join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="inverse-foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="unique-constraint" type="orm:unique-constraint" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="index" type="orm:index" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="lob"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Lob {} + + </xsd:documentation> + </xsd:annotation> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="lock-mode-type"> + <xsd:annotation> + <xsd:documentation> + + public enum LockModeType { READ, WRITE, OPTIMISTIC, OPTIMISTIC_FORCE_INCREMENT, PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT, NONE}; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="READ"/> + <xsd:enumeration value="WRITE"/> + <xsd:enumeration value="OPTIMISTIC"/> + <xsd:enumeration value="OPTIMISTIC_FORCE_INCREMENT"/> + <xsd:enumeration value="PESSIMISTIC_READ"/> + <xsd:enumeration value="PESSIMISTIC_WRITE"/> + <xsd:enumeration value="PESSIMISTIC_FORCE_INCREMENT"/> + <xsd:enumeration value="NONE"/> + + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + +<xsd:complexType name="many-to-many"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface ManyToMany { + Class targetEntity() default void.class; + CascadeType[] cascade() default {}; + FetchType fetch() default LAZY; + String mappedBy() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:element name="order-by" type="orm:order-by" + minOccurs="0"/> + <xsd:element name="order-column" type="orm:order-column" + minOccurs="0"/> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key" type="orm:map-key" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-class" type="orm:map-key-class" + minOccurs="0"/> + <xsd:choice> + <xsd:element name="map-key-temporal" + type="orm:temporal" + minOccurs="0"/> + <xsd:element name="map-key-enumerated" + type="orm:enumerated" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-attribute-override" + type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key-column" type="orm:map-key-column" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-join-column" + type="orm:map-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + </xsd:choice> + </xsd:sequence> + </xsd:choice> + <xsd:element name="join-table" type="orm:join-table" + minOccurs="0"/> + <xsd:element name="cascade" type="orm:cascade-type" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="target-entity" type="xsd:string"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="mapped-by" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="many-to-one"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface ManyToOne { + Class targetEntity() default void.class; + CascadeType[] cascade() default {}; + FetchType fetch() default EAGER; + boolean optional() default true; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="join-table" type="orm:join-table" + minOccurs="0"/> + </xsd:choice> + <xsd:element name="cascade" type="orm:cascade-type" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="target-entity" type="xsd:string"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="optional" type="xsd:boolean"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="maps-id" type="xsd:string"/> + <xsd:attribute name="id" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="map-key"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface MapKey { + String name() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="map-key-class"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface MapKeyClass { + Class value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="class" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="map-key-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface MapKeyColumn { + String name() default ""; + boolean unique() default false; + boolean nullable() default false; + boolean insertable() default true; + boolean updatable() default true; + String columnDefinition() default ""; + String table() default ""; + int length() default 255; + int precision() default 0; // decimal precision + int scale() default 0; // decimal scale + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="unique" type="xsd:boolean"/> + <xsd:attribute name="nullable" type="xsd:boolean"/> + <xsd:attribute name="insertable" type="xsd:boolean"/> + <xsd:attribute name="updatable" type="xsd:boolean"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + <xsd:attribute name="table" type="xsd:string"/> + <xsd:attribute name="length" type="xsd:int"/> + <xsd:attribute name="precision" type="xsd:int"/> + <xsd:attribute name="scale" type="xsd:int"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="map-key-join-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface MapKeyJoinColumn { + String name() default ""; + String referencedColumnName() default ""; + boolean unique() default false; + boolean nullable() default false; + boolean insertable() default true; + boolean updatable() default true; + String columnDefinition() default ""; + String table() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="referenced-column-name" type="xsd:string"/> + <xsd:attribute name="unique" type="xsd:boolean"/> + <xsd:attribute name="nullable" type="xsd:boolean"/> + <xsd:attribute name="insertable" type="xsd:boolean"/> + <xsd:attribute name="updatable" type="xsd:boolean"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + <xsd:attribute name="table" type="xsd:string"/> + </xsd:complexType> + + +<!-- **************************************************** --> + + <xsd:complexType name="mapped-superclass"> + <xsd:annotation> + <xsd:documentation> + + Defines the settings and mappings for a mapped superclass. Is + allowed to be sparsely populated and used in conjunction with + the annotations. Alternatively, the metadata-complete attribute + can be used to indicate that no annotations are to be processed + If this is the case then the defaulting rules will be recursively + applied. + + @Target(TYPE) @Retention(RUNTIME) + public @interface MappedSuperclass{} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="id-class" type="orm:id-class" minOccurs="0"/> + <xsd:element name="exclude-default-listeners" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="exclude-superclass-listeners" type="orm:emptyType" + minOccurs="0"/> + <xsd:element name="entity-listeners" type="orm:entity-listeners" + minOccurs="0"/> + <xsd:element name="pre-persist" type="orm:pre-persist" minOccurs="0"/> + <xsd:element name="post-persist" type="orm:post-persist" + minOccurs="0"/> + <xsd:element name="pre-remove" type="orm:pre-remove" minOccurs="0"/> + <xsd:element name="post-remove" type="orm:post-remove" minOccurs="0"/> + <xsd:element name="pre-update" type="orm:pre-update" minOccurs="0"/> + <xsd:element name="post-update" type="orm:post-update" minOccurs="0"/> + <xsd:element name="post-load" type="orm:post-load" minOccurs="0"/> + <xsd:element name="attributes" type="orm:attributes" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="class" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="metadata-complete" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="named-native-query"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface NamedNativeQuery { + String name(); + String query(); + QueryHint[] hints() default {}; + Class resultClass() default void.class; + String resultSetMapping() default ""; //named SqlResultSetMapping + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="query" type="xsd:string"/> + <xsd:element name="hint" type="orm:query-hint" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="result-class" type="xsd:string"/> + <xsd:attribute name="result-set-mapping" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="named-query"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface NamedQuery { + String name(); + String query(); + LockModeType lockMode() default NONE; + QueryHint[] hints() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="query" type="xsd:string"/> + <xsd:element name="lock-mode" type="orm:lock-mode-type" minOccurs="0"/> + <xsd:element name="hint" type="orm:query-hint" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> +</xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="named-stored-procedure-query"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface NamedStoredProcedureQuery { + String name(); + String procedureName(); + StoredProcedureParameter[] parameters() default {}; + Class[] resultClasses() default {}; + String[] resultSetMappings() default{}; + QueryHint[] hints() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="stored-procedure-parameter" + type="orm:stored-procedure-parameter" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="result-class" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="result-set-mapping" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="hint" type="orm:query-hint" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="procedure-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + +<xsd:complexType name="one-to-many"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface OneToMany { + Class targetEntity() default void.class; + CascadeType[] cascade() default {}; + FetchType fetch() default LAZY; + String mappedBy() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:element name="order-by" type="orm:order-by" + minOccurs="0"/> + <xsd:element name="order-column" type="orm:order-column" + minOccurs="0"/> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key" type="orm:map-key" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-class" type="orm:map-key-class" + minOccurs="0"/> + <xsd:choice> + <xsd:element name="map-key-temporal" + type="orm:temporal" + minOccurs="0"/> + <xsd:element name="map-key-enumerated" + type="orm:enumerated" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-attribute-override" + type="orm:attribute-override" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-convert" type="orm:convert" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:choice> + <xsd:choice> + <xsd:element name="map-key-column" type="orm:map-key-column" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="map-key-join-column" + type="orm:map-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="map-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + </xsd:choice> + </xsd:sequence> + </xsd:choice> + <xsd:choice> + <xsd:element name="join-table" type="orm:join-table" + minOccurs="0"/> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + </xsd:choice> + <xsd:element name="cascade" type="orm:cascade-type" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="target-entity" type="xsd:string"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="mapped-by" type="xsd:string"/> + <xsd:attribute name="orphan-removal" type="xsd:boolean"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="one-to-one"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface OneToOne { + Class targetEntity() default void.class; + CascadeType[] cascade() default {}; + FetchType fetch() default EAGER; + boolean optional() default true; + String mappedBy() default ""; + boolean orphanRemoval() default false; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:choice> + <xsd:sequence> + <xsd:element name="primary-key-join-column" + type="orm:primary-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="primary-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:sequence> + <xsd:element name="join-column" type="orm:join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="foreign-key" type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="join-table" type="orm:join-table" + minOccurs="0"/> + </xsd:choice> + <xsd:element name="cascade" type="orm:cascade-type" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="target-entity" type="xsd:string"/> + <xsd:attribute name="fetch" type="orm:fetch-type"/> + <xsd:attribute name="optional" type="xsd:boolean"/> + <xsd:attribute name="access" type="orm:access-type"/> + <xsd:attribute name="mapped-by" type="xsd:string"/> + <xsd:attribute name="orphan-removal" type="xsd:boolean"/> + <xsd:attribute name="maps-id" type="xsd:string"/> + <xsd:attribute name="id" type="xsd:boolean"/> +</xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="order-by"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface OrderBy { + String value() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:string"/> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="order-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface OrderColumn { + String name() default ""; + boolean nullable() default true; + boolean insertable() default true; + boolean updatable() default true; + String columnDefinition() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="nullable" type="xsd:boolean"/> + <xsd:attribute name="insertable" type="xsd:boolean"/> + <xsd:attribute name="updatable" type="xsd:boolean"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="parameter-mode"> + <xsd:annotation> + <xsd:documentation> + + public enum ParameterMode { IN, INOUT, OUT, REF_CURSOR}; + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="IN"/> + <xsd:enumeration value="INOUT"/> + <xsd:enumeration value="OUT"/> + <xsd:enumeration value="REF_CURSOR"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="post-load"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PostLoad {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="post-persist"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PostPersist {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="post-remove"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PostRemove {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="post-update"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PostUpdate {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="pre-persist"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PrePersist {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="pre-remove"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PreRemove {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="pre-update"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD}) @Retention(RUNTIME) + public @interface PreUpdate {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="method-name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="primary-key-join-column"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface PrimaryKeyJoinColumn { + String name() default ""; + String referencedColumnName() default ""; + String columnDefinition() default ""; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="referenced-column-name" type="xsd:string"/> + <xsd:attribute name="column-definition" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="query-hint"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface QueryHint { + String name(); + String value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="value" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="secondary-table"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface SecondaryTable { + String name(); + String catalog() default ""; + String schema() default ""; + PrimaryKeyJoinColumn[] pkJoinColumns() default {}; + UniqueConstraint[] uniqueConstraints() default {}; + Index[] indexes() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:sequence> + <xsd:element name="primary-key-join-column" + type="orm:primary-key-join-column" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="primary-key-foreign-key" + type="orm:foreign-key" + minOccurs="0"/> + </xsd:sequence> + <xsd:element name="unique-constraint" type="orm:unique-constraint" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="index" type="orm:index" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="sequence-generator"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface SequenceGenerator { + String name(); + String sequenceName() default ""; + String catalog() default ""; + String schema() default ""; + int initialValue() default 1; + int allocationSize() default 50; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="sequence-name" type="xsd:string"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + <xsd:attribute name="initial-value" type="xsd:int"/> + <xsd:attribute name="allocation-size" type="xsd:int"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="sql-result-set-mapping"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface SqlResultSetMapping { + String name(); + EntityResult[] entities() default {}; + ConstructorResult[] classes() default{}; + ColumnResult[] columns() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="entity-result" type="orm:entity-result" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="constructor-result" type="orm:constructor-result" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="column-result" type="orm:column-result" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="stored-procedure-parameter"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface StoredProcedureParameter { + String name() default ""; + ParameterMode mode() default ParameterMode.IN; + Class type(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="parameter-mode" type="orm:parameter-mode" + minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="class" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="table"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE}) @Retention(RUNTIME) + public @interface Table { + String name() default ""; + String catalog() default ""; + String schema() default ""; + UniqueConstraint[] uniqueConstraints() default {}; + Index[] indexes() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="unique-constraint" type="orm:unique-constraint" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="index" type="orm:index" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="table-generator"> + <xsd:annotation> + <xsd:documentation> + + @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) + public @interface TableGenerator { + String name(); + String table() default ""; + String catalog() default ""; + String schema() default ""; + String pkColumnName() default ""; + String valueColumnName() default ""; + String pkColumnValue() default ""; + int initialValue() default 0; + int allocationSize() default 50; + UniqueConstraint[] uniqueConstraints() default {}; + Indexes[] indexes() default {}; + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="description" type="xsd:string" minOccurs="0"/> + <xsd:element name="unique-constraint" type="orm:unique-constraint" + minOccurs="0" maxOccurs="unbounded"/> + <xsd:element name="index" type="orm:index" + minOccurs="0" maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="table" type="xsd:string"/> + <xsd:attribute name="catalog" type="xsd:string"/> + <xsd:attribute name="schema" type="xsd:string"/> + <xsd:attribute name="pk-column-name" type="xsd:string"/> + <xsd:attribute name="value-column-name" type="xsd:string"/> + <xsd:attribute name="pk-column-value" type="xsd:string"/> + <xsd:attribute name="initial-value" type="xsd:int"/> + <xsd:attribute name="allocation-size" type="xsd:int"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:simpleType name="temporal"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Temporal { + TemporalType value(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="orm:temporal-type"/> + </xsd:simpleType> + + <!-- **************************************************** --> + + <xsd:simpleType name="temporal-type"> + <xsd:annotation> + <xsd:documentation> + + public enum TemporalType { + DATE, // java.sql.Date + TIME, // java.sql.Time + TIMESTAMP // java.sql.Timestamp + } + + </xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:token"> + <xsd:enumeration value="DATE"/> + <xsd:enumeration value="TIME"/> + <xsd:enumeration value="TIMESTAMP"/> + </xsd:restriction> + </xsd:simpleType> + +<!-- **************************************************** --> + + <xsd:complexType name="transient"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Transient {} + + </xsd:documentation> + </xsd:annotation> + <xsd:attribute name="name" type="xsd:string" use="required"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="unique-constraint"> + <xsd:annotation> + <xsd:documentation> + + @Target({}) @Retention(RUNTIME) + public @interface UniqueConstraint { + String name() default ""; + String[] columnNames(); + } + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="column-name" type="xsd:string" + maxOccurs="unbounded"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string"/> + </xsd:complexType> + +<!-- **************************************************** --> + + <xsd:complexType name="version"> + <xsd:annotation> + <xsd:documentation> + + @Target({METHOD, FIELD}) @Retention(RUNTIME) + public @interface Version {} + + </xsd:documentation> + </xsd:annotation> + <xsd:sequence> + <xsd:element name="column" type="orm:column" minOccurs="0"/> + <xsd:element name="temporal" type="orm:temporal" minOccurs="0"/> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required"/> + <xsd:attribute name="access" type="orm:access-type"/> + </xsd:complexType> + +</xsd:schema>
diff --git a/src/javax/persistence/spi/PersistenceProvider.java b/src/javax/persistence/spi/PersistenceProvider.java index aa9870b..1dbe7ff 100644 --- a/src/javax/persistence/spi/PersistenceProvider.java +++ b/src/javax/persistence/spi/PersistenceProvider.java
@@ -23,7 +23,8 @@ * * <p> It is invoked by the container in Java EE environments and * by the {@link javax.persistence.Persistence} class in Java SE environments to - * create an {@link javax.persistence.EntityManagerFactory}. + * create an {@link javax.persistence.EntityManagerFactory} and/or to cause + * schema generation to occur. * * @since Java Persistence 1.0 */ @@ -52,7 +53,8 @@ * @param info metadata for use by the persistence provider * @param map a Map of integration-level properties for use * by the persistence provider (may be null if no properties - * are specified). + * are specified). These properties may include properties to + * control schema generation. * If a Bean Validation provider is present in the classpath, * the container must pass the <code>ValidatorFactory</code> instance in * the map with the key <code>"javax.persistence.validation.factory"</code>. @@ -64,6 +66,26 @@ */ public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map); + + /** + * Create database schemas and/or tables and/or create DDL + * scripts as determined by the supplied properties. + * <p> + * Called by the container when schema generation is to + * occur as a separate phase from creation of the entity + * manager factory. + * <p> + * @param info metadata for use by the persistence provider + * @param map properties for schema generation; these may + * also include provider-specific properties + * @throws PersistenceException if insufficient or inconsistent + * configuration information is provided of if schema + * generation otherwise fails + * + * @since Java Persistence 2.1 + */ + public void generateSchema(PersistenceUnitInfo info, Map map); + /** * Return the utility interface implemented by the persistence * provider.
diff --git a/src/org/eclipse/persistence/javax/persistence/osgi/OSGiProviderResolver.java b/src/org/eclipse/persistence/javax/persistence/osgi/OSGiProviderResolver.java index 65ee5c7..ca5ffb1 100644 --- a/src/org/eclipse/persistence/javax/persistence/osgi/OSGiProviderResolver.java +++ b/src/org/eclipse/persistence/javax/persistence/osgi/OSGiProviderResolver.java
@@ -210,4 +210,8 @@ System.out.println(sb.toString()); } } + + public void generateSchema(PersistenceUnitInfo info, Map map) { + // TODO: JPA 2.1 Functionality + } }