HHH-16115 - Develop an intermediate metamodel binding model
This commit is contained in:
parent
6d719003ce
commit
9049b531b7
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||
*/
|
||||
package org.hibernate.boot.jaxb.mapping.marshall;
|
||||
|
||||
import org.hibernate.metamodel.CollectionClassification;
|
||||
|
||||
/**
|
||||
* JAXB marshalling for {@link CollectionClassification}
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class CollectionClassificationMarshalling {
|
||||
public static CollectionClassification fromXml(String name) {
|
||||
return CollectionClassification.interpretSetting( name.replace( '-', '_' ) );
|
||||
}
|
||||
|
||||
public static String toXml(CollectionClassification classification) {
|
||||
return classification.name().replace( '_', '-' );
|
||||
}
|
||||
}
|
|
@ -112,7 +112,7 @@ public class JPAXMLOverriddenMetadataProvider implements MetadataProvider {
|
|||
}
|
||||
defaults.put( EntityListeners.class, entityListeners );
|
||||
for ( JaxbEntityMappings entityMappings : xmlContext.getAllDocuments() ) {
|
||||
List<JaxbSequenceGenerator> jaxbSequenceGenerators = entityMappings.getSequenceGenerator();
|
||||
List<JaxbSequenceGenerator> jaxbSequenceGenerators = entityMappings.getSequenceGenerators();
|
||||
List<SequenceGenerator> sequenceGenerators = (List<SequenceGenerator>) defaults.get( SequenceGenerator.class );
|
||||
if ( sequenceGenerators == null ) {
|
||||
sequenceGenerators = new ArrayList<>();
|
||||
|
@ -122,7 +122,7 @@ public class JPAXMLOverriddenMetadataProvider implements MetadataProvider {
|
|||
sequenceGenerators.add( JPAXMLOverriddenAnnotationReader.buildSequenceGeneratorAnnotation( element ) );
|
||||
}
|
||||
|
||||
List<JaxbTableGenerator> jaxbTableGenerators = entityMappings.getTableGenerator();
|
||||
List<JaxbTableGenerator> jaxbTableGenerators = entityMappings.getTableGenerators();
|
||||
List<TableGenerator> tableGenerators = (List<TableGenerator>) defaults.get( TableGenerator.class );
|
||||
if ( tableGenerators == null ) {
|
||||
tableGenerators = new ArrayList<>();
|
||||
|
|
|
@ -584,6 +584,25 @@ public final class StringHelper {
|
|||
return isEmpty( prefix ) ? name : prefix + '.' + name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Qualifies {@code name} with {@code prefix} separated by a '.' if<ul>
|
||||
* <li>{@code name} is not already qualified</li>
|
||||
* <li>{@code prefix} is not null</li>
|
||||
* </ul>
|
||||
*
|
||||
* @apiNote Similar to {@link #qualifyConditionally}, except that here we explicitly
|
||||
* check whether {@code name} is already qualified.
|
||||
*/
|
||||
public static String qualifyConditionallyIfNot(String prefix, String name) {
|
||||
if ( name == null ) {
|
||||
throw new NullPointerException( "name was null attempting to build qualified name" );
|
||||
}
|
||||
if ( name.indexOf( '.' ) > 0 || isEmpty( prefix ) ) {
|
||||
return name;
|
||||
}
|
||||
return prefix + '.' + name;
|
||||
}
|
||||
|
||||
public static String[] qualify(String prefix, String[] names) {
|
||||
if ( prefix == null ) {
|
||||
return names;
|
||||
|
|
|
@ -87,10 +87,15 @@
|
|||
<!-- hbm : whether entities should be lazy (by default) or not -->
|
||||
<xsd:element name="default-lazy" type="xsd:boolean" minOccurs="0" />
|
||||
|
||||
<!-- hbm: <type-def/> definitions -->
|
||||
<!-- hbm: disabled for now to see if we can move away from String-base type mappings in XML also -->
|
||||
<!-- <xsd:element name="type-def" type="orm:hbm-type-def" minOccurs="0" maxOccurs="unbounded" /> -->
|
||||
<!-- hbm: Definitions of filer -->
|
||||
<xsd:element name="java-type" type="orm:java-type-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="jdbc-type" type="orm:jdbc-type-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="user-type" type="orm:user-type-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="composite-user-type" type="orm:composite-user-type-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="collection-user-type" type="orm:collection-user-type-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="conversion" type="orm:converter-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
|
||||
<xsd:element name="embeddable-instantiator" type="orm:embeddable-instantiator-registration" minOccurs="0" maxOccurs="unbounded" />
|
||||
|
||||
<xsd:element name="filter-def" type="orm:filter-def" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xsd:element name="fetch-profile" type="orm:fetch-profile" minOccurs="0" maxOccurs="unbounded" />
|
||||
|
||||
|
@ -154,6 +159,110 @@
|
|||
<xsd:attribute name="maximumVersion" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="java-type-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @JavaTypeRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="class" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="descriptor" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="jdbc-type-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @JdbcTypeRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="code" type="xsd:int"/>
|
||||
<xsd:attribute name="descriptor" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="user-type-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @TypeRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="class" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="descriptor" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="composite-user-type-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @CompositeTypeRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="class" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="descriptor" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="collection-user-type-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @CollectionTypeRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="param" minOccurs="0" maxOccurs="unbounded" type="configuration-parameter"/>
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="classification" use="required" type="orm:collection-classifications"/>
|
||||
<xsd:attribute name="descriptor" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="configuration-parameter">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Configuration parameter user-types
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="value" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:simpleType name="collection-classifications">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See `@org.hibernate.metamodel.CollectionClassification`
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:restriction base="xsd:token">
|
||||
<xsd:enumeration value="array"/>
|
||||
<xsd:enumeration value="bag"/>
|
||||
<xsd:enumeration value="id-bag"/>
|
||||
<xsd:enumeration value="list"/>
|
||||
<xsd:enumeration value="set"/>
|
||||
<xsd:enumeration value="sorted-set"/>
|
||||
<xsd:enumeration value="ordered-set"/>
|
||||
<xsd:enumeration value="map"/>
|
||||
<xsd:enumeration value="sorted-map"/>
|
||||
<xsd:enumeration value="ordered-map"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:complexType name="converter-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @ConverterRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="converter" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="class" type="xsd:string"/>
|
||||
<xsd:attribute name="auto-apply" type="xsd:boolean" default="true"/>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="embeddable-instantiator-registration">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
See @EmbeddableInstantiatorRegistration
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="embeddableClass" use="required" type="xsd:string"/>
|
||||
<xsd:attribute name="instantiator" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
|
||||
|
||||
<!-- **************************************************** -->
|
||||
|
||||
|
@ -282,10 +391,10 @@
|
|||
<!-- hbm : declare a SQL fragment to append to SELECT queries as a filter for this entity : @Where -->
|
||||
<xsd:element name="where" type="xsd:string" minOccurs="0"/>
|
||||
|
||||
<xsd:element name="loader" type="orm:custom-loader" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="sql-insert" type="orm:custom-sql" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="sql-update" type="orm:custom-sql" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="sql-delete" type="orm:custom-sql" minOccurs="0" maxOccurs="1"/>
|
||||
<xsd:element name="loader" type="orm:custom-loader" minOccurs="0"/>
|
||||
<xsd:element name="sql-insert" type="orm:custom-sql" minOccurs="0"/>
|
||||
<xsd:element name="sql-update" type="orm:custom-sql" minOccurs="0"/>
|
||||
<xsd:element name="sql-delete" type="orm:custom-sql" minOccurs="0"/>
|
||||
|
||||
<!-- hbm : should INSERT statements be dynamically generated : @DynamicInsert -->
|
||||
<xsd:element name="dynamic-insert" type="xsd:boolean" minOccurs="0"/>
|
||||
|
@ -318,7 +427,7 @@
|
|||
<xsd:element name="polymorphism" type="orm:polymorphism-type" default="implicit" minOccurs="0" />
|
||||
|
||||
<xsd:element name="discriminator-value" type="orm:discriminator-value" minOccurs="0"/>
|
||||
<xsd:choice minOccurs="0" maxOccurs="1">
|
||||
<xsd:choice minOccurs="0">
|
||||
<xsd:element name="discriminator-column" type="orm:discriminator-column" />
|
||||
<!-- hbm: support for Hibernate formula mapping -->
|
||||
<xsd:element name="discriminator-formula" type="xsd:string" />
|
||||
|
@ -353,7 +462,7 @@
|
|||
<xsd:element name="named-entity-graph" type="orm:named-entity-graph" minOccurs="0" maxOccurs="unbounded"/>
|
||||
|
||||
<!-- hbm: intended for use when mapping dynamic (MAP) models -->
|
||||
<xsd:element name="extends" type="xsd:string" minOccurs="0" maxOccurs="1" />
|
||||
<xsd:element name="extends" type="xsd:string" minOccurs="0"/>
|
||||
|
||||
<xsd:element name="filter" type="orm:hbm-filter" minOccurs="0" maxOccurs="unbounded" />
|
||||
|
||||
|
@ -2122,7 +2231,7 @@
|
|||
|
||||
<xsd:simpleType name="versionType">
|
||||
<xsd:restriction base="xsd:token">
|
||||
<xsd:pattern value="[0-9]+(\.[0-9]+)*"/>
|
||||
<xsd:pattern value="\d+(\.\d+)*"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
|
@ -2161,7 +2270,7 @@
|
|||
<xsd:attribute name="type" use="required" type="xsd:string"/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="condition" type="xsd:string" minOccurs="0" maxOccurs="1" />
|
||||
<xsd:element name="condition" type="xsd:string" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
|
||||
<xsd:attribute name="name" use="required" type="xsd:string"/>
|
||||
|
@ -2481,9 +2590,9 @@
|
|||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="type" type="xsd:string" minOccurs="0" maxOccurs="1" />
|
||||
<xsd:element name="column" type="orm:column" minOccurs="0" maxOccurs="1" />
|
||||
<xsd:element name="mapping" type="orm:hbm-any-discriminator-value-mapping" minOccurs="1" maxOccurs="unbounded" />
|
||||
<xsd:element name="type" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="column" type="orm:column" minOccurs="0"/>
|
||||
<xsd:element name="mapping" type="orm:hbm-any-discriminator-value-mapping" maxOccurs="unbounded" />
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
|
@ -2494,7 +2603,7 @@
|
|||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="type" type="xsd:string" minOccurs="0" maxOccurs="1" />
|
||||
<xsd:element name="type" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="column" type="orm:column" minOccurs="0" maxOccurs="unbounded" />
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
@ -2705,4 +2814,5 @@
|
|||
<xsd:enumeration value="never"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
</xsd:schema>
|
|
@ -29,6 +29,12 @@
|
|||
<bindings node=".//xsd:element[@name='identifier-generator']">
|
||||
<property name="genericGenerators"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='sequence-generator']">
|
||||
<property name="sequenceGenerators"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='table-generator']">
|
||||
<property name="tableGenerators"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='database-object']">
|
||||
<property name="databaseObjects"/>
|
||||
</bindings>
|
||||
|
@ -59,6 +65,33 @@
|
|||
<bindings node=".//xsd:element[@name='converter']">
|
||||
<property name="converters"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='java-type']">
|
||||
<property name="javaTypeRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='jdbc-type']">
|
||||
<property name="jdbcTypeRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='user-type']">
|
||||
<property name="userTypeRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='composite-user-type']">
|
||||
<property name="compositeUserTypeRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='collection-user-type']">
|
||||
<property name="collectionUserTypeRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='embeddable-instantiator']">
|
||||
<property name="embeddableInstantiatorRegistrations"/>
|
||||
</bindings>
|
||||
<bindings node=".//xsd:element[@name='conversion']">
|
||||
<property name="converterRegistrations"/>
|
||||
</bindings>
|
||||
</bindings>
|
||||
|
||||
<bindings node="//xsd:complexType[@name='collection-user-type-registration']">
|
||||
<bindings node=".//xsd:element[@name='param']">
|
||||
<property name="parameters"/>
|
||||
</bindings>
|
||||
</bindings>
|
||||
|
||||
<bindings node="//xsd:complexType[@name='entity']">
|
||||
|
@ -384,6 +417,12 @@
|
|||
printMethod="org.hibernate.boot.jaxb.mapping.marshall.ConstraintModeMarshalling.toXml" />
|
||||
</bindings>
|
||||
|
||||
<bindings node="//xsd:simpleType[@name='collection-classifications']">
|
||||
<javaType name="org.hibernate.metamodel.CollectionClassification"
|
||||
parseMethod="org.hibernate.boot.jaxb.mapping.marshall.CollectionClassificationMarshalling.fromXml"
|
||||
printMethod="org.hibernate.boot.jaxb.mapping.marshall.CollectionClassificationMarshalling.toXml" />
|
||||
</bindings>
|
||||
|
||||
</bindings>
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue