HHH-14529 Introduce JAXB bindings for JPA's orm.xml

Adapted from Steve's work on the unified JPA/ORM XML mapping. See:
4ff3795e60 (diff-b407928c3aa7ee1f231e0119ff70345caa5f6a83ed6348128c5159afbe3c6df2)
https://github.com/sebersole/hibernate-orm/compare/jandex-binding

Co-authored-by: Steve Ebersole <steve@hibernate.org>
This commit is contained in:
Yoann Rodière 2021-03-24 15:40:12 +01:00
parent 252fb65f95
commit 2907c95cbd
20 changed files with 3148 additions and 0 deletions

View File

@ -200,6 +200,11 @@ xjc {
xjcBinding = file( 'src/main/xjb/hbm-mapping-bindings.xjb' )
xjcExtensions = ['inheritance', 'simplify']
}
mapping {
xsd = file( 'src/main/resources/org/hibernate/jpa/orm_2_2.xsd' )
xjcBinding = file( 'src/main/xjb/mapping-bindings.xjb' )
xjcExtensions = ['inheritance']
}
}
}

View File

@ -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.internal;
import javax.persistence.AccessType;
/**
* Marshalling support for dealing with JPA AccessType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class AccessTypeMarshalling {
public static AccessType fromXml(String name) {
return AccessType.valueOf( name );
}
public static String toXml(AccessType accessType) {
return accessType.name();
}
}

View File

@ -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.internal;
import javax.persistence.DiscriminatorType;
/**
* Marshalling support for dealing with JPA DiscriminatorType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class DiscriminatorTypeMarshalling {
public static DiscriminatorType fromXml(String name) {
return DiscriminatorType.valueOf( name );
}
public static String toXml(DiscriminatorType discriminatorType) {
return discriminatorType.name();
}
}

View File

@ -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.internal;
import javax.persistence.EnumType;
/**
* Marshalling support for dealing with JPA EnumType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class EnumTypeMarshalling {
public static EnumType fromXml(String name) {
return EnumType.valueOf( name );
}
public static String toXml(EnumType enumType) {
return enumType.name();
}
}

View File

@ -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.internal;
import javax.persistence.FetchType;
/**
* Marshalling support for dealing with JPA FetchType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class FetchTypeMarshalling {
public static FetchType fromXml(String name) {
return FetchType.valueOf( name );
}
public static String toXml(FetchType fetchType) {
return fetchType.name();
}
}

View File

@ -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.internal;
import javax.persistence.LockModeType;
/**
* Marshalling support for dealing with JPA LockModeType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class LockModeTypeMarshalling {
public static LockModeType fromXml(String name) {
return LockModeType.valueOf( name );
}
public static String toXml(LockModeType lockModeType) {
return lockModeType.name();
}
}

View File

@ -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.internal;
import javax.persistence.ParameterMode;
/**
* Marshalling support for dealing with JPA ParameterMode enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class ParameterModeMarshalling {
public static ParameterMode fromXml(String name) {
return ParameterMode.valueOf( name );
}
public static String toXml(ParameterMode parameterMode) {
return parameterMode.name();
}
}

View File

@ -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.internal;
import javax.persistence.TemporalType;
/**
* Marshalling support for dealing with JPA TemporalType enums. Plugged into JAXB for binding
*
* @author Steve Ebersole
*/
public class TemporalTypeMarshalling {
public static TemporalType fromXml(String name) {
return TemporalType.valueOf( name );
}
public static String toXml(TemporalType temporalType) {
return temporalType.name();
}
}

View File

@ -0,0 +1,11 @@
/*
* 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>.
*/
/**
* JAXB for JPA's {@code orm.xml} mapping schema.
*/
package org.hibernate.boot.jaxb.mapping;

View File

@ -0,0 +1,35 @@
/*
* 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.spi;
import java.util.List;
/**
* Common interface for JAXB bindings which are containers of attributes.
*
* @author Strong Liu
* @author Steve Ebersole
*/
public interface AttributesContainer {
List<JaxbTransient> getTransient();
List<JaxbBasic> getBasic();
List<JaxbElementCollection> getElementCollection();
List<JaxbEmbedded> getEmbedded();
List<JaxbManyToMany> getManyToMany();
List<JaxbManyToOne> getManyToOne();
List<JaxbOneToMany> getOneToMany();
List<JaxbOneToOne> getOneToOne();
}

View File

@ -0,0 +1,57 @@
/*
* 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.spi;
import java.util.List;
import javax.persistence.EnumType;
import javax.persistence.TemporalType;
/**
* Common interface for Jaxb bindings that represent persistent collection attributes.
*
* @author Brett Meyer
*/
public interface CollectionAttribute extends FetchableAttribute {
String getOrderBy();
void setOrderBy(String value);
JaxbOrderColumn getOrderColumn();
void setOrderColumn(JaxbOrderColumn value);
JaxbMapKey getMapKey();
void setMapKey(JaxbMapKey value);
JaxbMapKeyClass getMapKeyClass();
void setMapKeyClass(JaxbMapKeyClass value);
TemporalType getMapKeyTemporal();
void setMapKeyTemporal(TemporalType value);
EnumType getMapKeyEnumerated();
void setMapKeyEnumerated(EnumType value);
List<JaxbAttributeOverride> getMapKeyAttributeOverride();
List<JaxbConvert> getMapKeyConvert();
JaxbMapKeyColumn getMapKeyColumn();
void setMapKeyColumn(JaxbMapKeyColumn value);
List<JaxbMapKeyJoinColumn> getMapKeyJoinColumn();
JaxbForeignKey getMapKeyForeignKey();
void setMapKeyForeignKey(JaxbForeignKey value);
}

View File

@ -0,0 +1,22 @@
/*
* 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.spi;
import javax.persistence.FetchType;
/**
* Common interface for JAXB bindings that represent attributes with laziness and fetch style.
*
* @author Brett Meyer
*/
public interface FetchableAttribute {
FetchType getFetch();
void setFetch(FetchType value);
}

View File

@ -0,0 +1,17 @@
/*
* 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.spi;
/**
* Common interface for all the JAXB bindings representing lifecycle callbacks.
*
* @author Strong Liu
* @author Steve Ebersole
*/
public interface LifecycleCallback {
String getMethodName();
}

View File

@ -0,0 +1,28 @@
/*
* 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.spi;
import javax.persistence.AccessType;
/**
* Common interface for JAXB bindings representing entities, mapped-superclasses and embeddables (JPA collective
* calls these "managed types" in terms of its Metamodel api).
*
* @author Strong Liu
* @author Steve Ebersole
*/
public interface ManagedType {
String getClazz();
void setClazz(String className);
Boolean isMetadataComplete();
void setMetadataComplete(Boolean isMetadataComplete);
AccessType getAccess();
}

View File

@ -0,0 +1,23 @@
/*
* 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.spi;
import javax.persistence.AccessType;
/**
* Common interface for JAXB bindings that represent persistent attributes.
*
* @author Strong Liu
* @author Steve Ebersole
*/
public interface PersistentAttribute {
String getName();
AccessType getAccess();
void setAccess(AccessType accessType);
}

View File

@ -0,0 +1,23 @@
/*
* 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.spi;
/**
* Common interface for JAXB bindings that understand database schema (tables, sequences, etc).
*
* @author Strong Liu
* @author Steve Ebersole
*/
public interface SchemaAware {
String getSchema();
void setSchema(String schema);
String getCatalog();
void setCatalog(String catalog);
}

View File

@ -17,6 +17,7 @@
import org.hibernate.EntityMode;
import org.hibernate.MappingException;
import org.hibernate.boot.model.CustomSql;
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.engine.OptimisticLockStyle;
@ -744,6 +745,16 @@ public Iterator getUnjoinedPropertyIterator() {
return properties.iterator();
}
public void setCustomSqlInsert(CustomSql customSql) {
if ( customSql != null ) {
setCustomSQLInsert(
customSql.getSql(),
customSql.isCallable(),
customSql.getCheckStyle()
);
}
}
public void setCustomSQLInsert(String customSQLInsert, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) {
this.customSQLInsert = customSQLInsert;
this.customInsertCallable = callable;
@ -762,6 +773,16 @@ public ExecuteUpdateResultCheckStyle getCustomSQLInsertCheckStyle() {
return insertCheckStyle;
}
public void setCustomSqlUpdate(CustomSql customSql) {
if ( customSql != null ) {
setCustomSQLUpdate(
customSql.getSql(),
customSql.isCallable(),
customSql.getCheckStyle()
);
}
}
public void setCustomSQLUpdate(String customSQLUpdate, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) {
this.customSQLUpdate = customSQLUpdate;
this.customUpdateCallable = callable;
@ -780,6 +801,16 @@ public ExecuteUpdateResultCheckStyle getCustomSQLUpdateCheckStyle() {
return updateCheckStyle;
}
public void setCustomSqlDelete(CustomSql customSql) {
if ( customSql != null ) {
setCustomSQLDelete(
customSql.getSql(),
customSql.isCallable(),
customSql.getCheckStyle()
);
}
}
public void setCustomSQLDelete(String customSQLDelete, boolean callable, ExecuteUpdateResultCheckStyle checkStyle) {
this.customSQLDelete = customSQLDelete;
this.customDeleteCallable = callable;

View File

@ -13,6 +13,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Objects;
import javax.persistence.AttributeConverter;
@ -399,6 +400,18 @@ public void setIdentifierGeneratorProperties(Properties identifierGeneratorPrope
this.identifierGeneratorProperties = identifierGeneratorProperties;
}
/**
* Sets the identifierGeneratorProperties.
* @param identifierGeneratorProperties The identifierGeneratorProperties to set
*/
public void setIdentifierGeneratorProperties(Map identifierGeneratorProperties) {
if ( identifierGeneratorProperties != null ) {
Properties properties = new Properties();
properties.putAll( identifierGeneratorProperties );
setIdentifierGeneratorProperties( properties );
}
}
/**
* Sets the identifierGeneratorStrategy.
* @param identifierGeneratorStrategy The identifierGeneratorStrategy to set
@ -679,6 +692,14 @@ public boolean isTypeSpecified() {
public void setTypeParameters(Properties parameterMap) {
this.typeParameters = parameterMap;
}
public void setTypeParameters(Map<String, String> parameters) {
if ( parameters != null ) {
Properties properties = new Properties();
properties.putAll( parameters );
setTypeParameters( properties );
}
}
public Properties getTypeParameters() {
return typeParameters;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
extensionBindingPrefixes="inheritance"
version="2.1">
<bindings schemaLocation="../resources/org/hibernate/jpa/orm_2_2.xsd" node="/xsd:schema">
<schemaBindings>
<package name="org.hibernate.boot.jaxb.mapping.spi" />
<nameXmlTransform>
<typeName prefix="Jaxb" />
<elementName prefix="Jaxb" />
<modelGroupName prefix="Jaxb" />
<anonymousTypeName prefix="Jaxb" />
</nameXmlTransform>
</schemaBindings>
<bindings node="//xsd:simpleType[@name='access-type']">
<javaType name="javax.persistence.AccessType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.AccessTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.AccessTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='discriminator-type']">
<javaType name="javax.persistence.DiscriminatorType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.DiscriminatorTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.DiscriminatorTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='enum-type']">
<javaType name="javax.persistence.EnumType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.EnumTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.EnumTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='fetch-type']">
<javaType name="javax.persistence.FetchType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.FetchTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.FetchTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='lock-mode-type']">
<javaType name="javax.persistence.LockModeType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.LockModeTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.LockModeTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='parameter-mode']">
<javaType name="javax.persistence.ParameterMode"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.ParameterModeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.ParameterModeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:simpleType[@name='temporal-type']">
<javaType name="javax.persistence.TemporalType"
parseMethod="org.hibernate.boot.jaxb.mapping.internal.TemporalTypeMarshalling.fromXml"
printMethod="org.hibernate.boot.jaxb.mapping.internal.TemporalTypeMarshalling.toXml" />
</bindings>
<bindings node="//xsd:complexType[@name='secondary-table']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='table']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='join-table']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='collection-table']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='table-generator']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='sequence-generator']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.SchemaAware</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='entity']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.ManagedType</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='embeddable']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.ManagedType</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='mapped-superclass']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.ManagedType</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='id']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='version']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='basic']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='many-to-one']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.FetchableAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='one-to-many']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.CollectionAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='one-to-one']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.FetchableAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='embedded-id']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='embedded']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='many-to-many']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.CollectionAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='element-collection']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.PersistentAttribute</inheritance:implements>
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.CollectionAttribute</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='pre-persist']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='pre-remove']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='pre-update']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='post-load']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='post-remove']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='post-update']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='post-persist']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.LifecycleCallback</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='attributes']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.AttributesContainer</inheritance:implements>
</bindings>
<bindings node="//xsd:complexType[@name='embeddable-attributes']">
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.AttributesContainer</inheritance:implements>
</bindings>
</bindings>
<!-- All bindings need to be serializable for cached metadata sources. -->
<globalBindings>
<serializable />
</globalBindings>
</bindings>