HHH-6371 - Develop metamodel binding creation using a push approach
This commit is contained in:
parent
66bd796063
commit
9e95d41689
|
@ -61,6 +61,8 @@ libraries = [
|
||||||
// Dom4J
|
// Dom4J
|
||||||
dom4j: 'dom4j:dom4j:1.6.1@jar',
|
dom4j: 'dom4j:dom4j:1.6.1@jar',
|
||||||
jaxb: 'com.sun.xml.bind:jaxb-xjc:2.1.6',
|
jaxb: 'com.sun.xml.bind:jaxb-xjc:2.1.6',
|
||||||
|
jaxb2_basics: 'org.jvnet.jaxb2_commons:jaxb2-basics:0.6.0',
|
||||||
|
jaxb2_ant: 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.6.0',
|
||||||
|
|
||||||
// h2
|
// h2
|
||||||
h2: 'com.h2database:h2:1.2.145',
|
h2: 'com.h2database:h2:1.2.145',
|
||||||
|
@ -141,6 +143,8 @@ subprojects { subProject ->
|
||||||
jbossLoggingTool( libraries.logging_tools )
|
jbossLoggingTool( libraries.logging_tools )
|
||||||
hibernateJpaModelGenTool( libraries.jpa_modelgen )
|
hibernateJpaModelGenTool( libraries.jpa_modelgen )
|
||||||
jaxb( libraries.jaxb )
|
jaxb( libraries.jaxb )
|
||||||
|
jaxb( libraries.jaxb2_basics )
|
||||||
|
jaxb( libraries.jaxb2_ant )
|
||||||
deployerJars "org.apache.maven.wagon:wagon-http:1.0-beta-6"
|
deployerJars "org.apache.maven.wagon:wagon-http:1.0-beta-6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,15 +57,20 @@ task jaxb {
|
||||||
hbmXsd = file( 'src/main/resources/org/hibernate/hibernate-mapping-4.0.xsd' )
|
hbmXsd = file( 'src/main/resources/org/hibernate/hibernate-mapping-4.0.xsd' )
|
||||||
ormXsd = file( 'src/main/resources/org/hibernate/ejb/orm_2_0.xsd' )
|
ormXsd = file( 'src/main/resources/org/hibernate/ejb/orm_2_0.xsd' )
|
||||||
|
|
||||||
|
// input bindings
|
||||||
|
cfgXjb = file( 'src/main/xjb/hbm-configuration-bindings.xjb' )
|
||||||
|
hbmXjb = file( 'src/main/xjb/hbm-mapping-bindings.xjb' )
|
||||||
|
ormXjb = file( 'src/main/xjb/orm-bindings.xjb' )
|
||||||
|
|
||||||
// configure Gradle up-to-date checking
|
// configure Gradle up-to-date checking
|
||||||
inputs.files( [cfgXsd, hbmXsd, ormXsd] )
|
inputs.files( [cfgXsd, hbmXsd, ormXsd, cfgXjb, hbmXjb, ormXjb] )
|
||||||
outputs.dir( jaxbTargetDir )
|
outputs.dir( jaxbTargetDir )
|
||||||
|
|
||||||
// perform actions
|
// perform actions
|
||||||
doLast {
|
doLast {
|
||||||
jaxbTargetDir.mkdirs()
|
jaxbTargetDir.mkdirs()
|
||||||
|
|
||||||
ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath)
|
ant.taskdef(name: 'xjc', classname: 'org.jvnet.jaxb2_commons.xjc.XJC2Task', classpath: configurations.jaxb.asPath)
|
||||||
ant.jaxbTargetDir = jaxbTargetDir
|
ant.jaxbTargetDir = jaxbTargetDir
|
||||||
|
|
||||||
// hibernate-configuration
|
// hibernate-configuration
|
||||||
|
@ -80,9 +85,12 @@ task jaxb {
|
||||||
ant.xjc(
|
ant.xjc(
|
||||||
destdir: '${jaxbTargetDir}',
|
destdir: '${jaxbTargetDir}',
|
||||||
package: 'org.hibernate.metamodel.source.hbm.xml.mapping',
|
package: 'org.hibernate.metamodel.source.hbm.xml.mapping',
|
||||||
binding: 'src/main/xjb/hbm-mapping-bindings.xjb',
|
binding: hbmXjb.path,
|
||||||
schema: hbmXsd.path
|
schema: hbmXsd.path,
|
||||||
)
|
extension: 'true'
|
||||||
|
) {
|
||||||
|
arg line: '-Xinheritance'
|
||||||
|
}
|
||||||
|
|
||||||
// orm.xml (jpa)
|
// orm.xml (jpa)
|
||||||
ant.xjc(
|
ant.xjc(
|
||||||
|
|
|
@ -1,184 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
|
|
||||||
* indicated by the @author tags or express copyright attribution
|
|
||||||
* statements applied by the authors. All third-party contributions are
|
|
||||||
* distributed under license by Red Hat Inc.
|
|
||||||
*
|
|
||||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
|
||||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
package org.hibernate.metamodel.binder;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.hibernate.EntityMode;
|
|
||||||
import org.hibernate.metamodel.binder.source.BindingContext;
|
|
||||||
import org.hibernate.metamodel.binder.source.DiscriminatorSubClassEntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binder.source.EntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binder.source.JoinedSubClassEntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binder.source.RootEntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binder.source.UnionSubClassEntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binding.EntityBinding;
|
|
||||||
import org.hibernate.metamodel.binding.InheritanceType;
|
|
||||||
import org.hibernate.metamodel.domain.Entity;
|
|
||||||
import org.hibernate.metamodel.domain.JavaType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Steve Ebersole
|
|
||||||
*/
|
|
||||||
public class EntityBinder {
|
|
||||||
|
|
||||||
// todo : re-purpose this as a general "metadata binder" with public apis to handle all the specific bindings?
|
|
||||||
|
|
||||||
// todo : make this globally available from MetadataImpl
|
|
||||||
|
|
||||||
private final BindingContext bindingContext;
|
|
||||||
|
|
||||||
public EntityBinder(BindingContext bindingContext) {
|
|
||||||
this.bindingContext = bindingContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityBinding createEntityBinding(EntityDescriptor entityDescriptor) {
|
|
||||||
final InheritanceType inheritanceType = entityDescriptor.getEntityInheritanceType();
|
|
||||||
if ( inheritanceType == InheritanceType.NO_INHERITANCE ) {
|
|
||||||
// root, also doubles as a type check since the cast would fail
|
|
||||||
return makeEntityBinding( (RootEntityDescriptor) entityDescriptor );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( entityDescriptor.getSuperEntityName() == null ) {
|
|
||||||
throw new MappingException(
|
|
||||||
"Encountered inheritance strategy, but no super type found",
|
|
||||||
entityDescriptor.getOrigin()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( inheritanceType == InheritanceType.SINGLE_TABLE ) {
|
|
||||||
// discriminator subclassing
|
|
||||||
return makeEntityBinding( (DiscriminatorSubClassEntityDescriptor) entityDescriptor );
|
|
||||||
}
|
|
||||||
else if ( inheritanceType == InheritanceType.JOINED ) {
|
|
||||||
// joined subclassing
|
|
||||||
return makeEntityBinding( (JoinedSubClassEntityDescriptor) entityDescriptor );
|
|
||||||
}
|
|
||||||
else if ( inheritanceType == InheritanceType.TABLE_PER_CLASS ) {
|
|
||||||
return makeEntityBinding( (UnionSubClassEntityDescriptor) entityDescriptor );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new IllegalStateException( "Unexpected inheritance type [" + inheritanceType + "]" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityBinding makeEntityBinding(RootEntityDescriptor entityDescriptor) {
|
|
||||||
final EntityBinding entityBinding = new EntityBinding();
|
|
||||||
|
|
||||||
final Entity entity = new Entity( entityDescriptor.getEntityName(), null, bindingContext.makeJavaType( entityDescriptor.getClassName() ) );
|
|
||||||
entityBinding.setEntity( entity );
|
|
||||||
|
|
||||||
performBasicEntityBind( entityBinding, entityDescriptor );
|
|
||||||
|
|
||||||
entityBinding.setMutable( entityDescriptor.isMutable() );
|
|
||||||
entityBinding.setExplicitPolymorphism( entityDescriptor.isExplicitPolymorphism() );
|
|
||||||
entityBinding.setWhereFilter( entityDescriptor.getWhereFilter() );
|
|
||||||
entityBinding.setRowId( entityDescriptor.getRowId() );
|
|
||||||
entityBinding.setOptimisticLockStyle( entityDescriptor.getOptimisticLockStyle() );
|
|
||||||
entityBinding.setCaching( entityDescriptor.getCaching() );
|
|
||||||
|
|
||||||
return entityBinding;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityBinding makeEntityBinding(DiscriminatorSubClassEntityDescriptor entityDescriptor) {
|
|
||||||
// temporary!!!
|
|
||||||
|
|
||||||
final EntityBinding entityBinding = new EntityBinding();
|
|
||||||
|
|
||||||
final Entity entity = new Entity( entityDescriptor.getEntityName(), null, bindingContext.makeJavaType( entityDescriptor.getClassName() ) );
|
|
||||||
entityBinding.setEntity( entity );
|
|
||||||
|
|
||||||
performBasicEntityBind( entityBinding, entityDescriptor );
|
|
||||||
|
|
||||||
return entityBinding;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityBinding makeEntityBinding(JoinedSubClassEntityDescriptor entityDescriptor) {
|
|
||||||
// temporary!!!
|
|
||||||
|
|
||||||
final EntityBinding entityBinding = new EntityBinding();
|
|
||||||
|
|
||||||
final Entity entity = new Entity( entityDescriptor.getEntityName(), null, bindingContext.makeJavaType( entityDescriptor.getClassName() ) );
|
|
||||||
entityBinding.setEntity( entity );
|
|
||||||
|
|
||||||
performBasicEntityBind( entityBinding, entityDescriptor );
|
|
||||||
|
|
||||||
return entityBinding;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EntityBinding makeEntityBinding(UnionSubClassEntityDescriptor entityDescriptor) {
|
|
||||||
// temporary!!!
|
|
||||||
|
|
||||||
final EntityBinding entityBinding = new EntityBinding();
|
|
||||||
|
|
||||||
final Entity entity = new Entity( entityDescriptor.getEntityName(), null, bindingContext.makeJavaType( entityDescriptor.getClassName() ) );
|
|
||||||
entityBinding.setEntity( entity );
|
|
||||||
|
|
||||||
performBasicEntityBind( entityBinding, entityDescriptor );
|
|
||||||
|
|
||||||
return entityBinding;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void performBasicEntityBind(EntityBinding entityBinding, EntityDescriptor entityDescriptor) {
|
|
||||||
entityBinding.setInheritanceType( entityDescriptor.getEntityInheritanceType() );
|
|
||||||
|
|
||||||
entityBinding.setJpaEntityName( entityDescriptor.getJpaEntityName() );
|
|
||||||
entityBinding.setEntityMode( entityDescriptor.getEntityMode() );
|
|
||||||
|
|
||||||
if ( entityDescriptor.getEntityMode() == EntityMode.POJO ) {
|
|
||||||
if ( entityDescriptor.getProxyInterfaceName() != null ) {
|
|
||||||
entityBinding.setProxyInterfaceType( bindingContext.makeJavaType( entityDescriptor.getProxyInterfaceName() ) );
|
|
||||||
entityBinding.setLazy( true );
|
|
||||||
}
|
|
||||||
else if ( entityDescriptor.isLazy() ) {
|
|
||||||
entityBinding.setProxyInterfaceType( entityBinding.getEntity().getJavaType() );
|
|
||||||
entityBinding.setLazy( true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
entityBinding.setProxyInterfaceType( new JavaType( Map.class ) );
|
|
||||||
entityBinding.setLazy( entityDescriptor.isLazy() );
|
|
||||||
}
|
|
||||||
|
|
||||||
entityBinding.setCustomEntityTuplizerClass( entityDescriptor.getCustomEntityTuplizerClass() );
|
|
||||||
entityBinding.setCustomEntityPersisterClass( entityDescriptor.getCustomEntityPersisterClass() );
|
|
||||||
|
|
||||||
entityBinding.setMetaAttributeContext( entityDescriptor.getMetaAttributeContext() );
|
|
||||||
|
|
||||||
entityBinding.setDynamicUpdate( entityDescriptor.isDynamicUpdate() );
|
|
||||||
entityBinding.setDynamicInsert( entityDescriptor.isDynamicInsert() );
|
|
||||||
entityBinding.setBatchSize( entityDescriptor.getBatchSize() );
|
|
||||||
entityBinding.setSelectBeforeUpdate( entityDescriptor.isSelectBeforeUpdate() );
|
|
||||||
entityBinding.setAbstract( entityDescriptor.isAbstract() );
|
|
||||||
|
|
||||||
entityBinding.setCustomLoaderName( entityDescriptor.getCustomLoaderName() );
|
|
||||||
entityBinding.setCustomInsert( entityDescriptor.getCustomInsert() );
|
|
||||||
entityBinding.setCustomUpdate( entityDescriptor.getCustomUpdate() );
|
|
||||||
entityBinding.setCustomDelete( entityDescriptor.getCustomDelete() );
|
|
||||||
|
|
||||||
if ( entityDescriptor.getSynchronizedTableNames() != null ) {
|
|
||||||
entityBinding.addSynchronizedTableNames( entityDescriptor.getSynchronizedTableNames() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -24,6 +24,7 @@
|
||||||
package org.hibernate.metamodel.binder.source;
|
package org.hibernate.metamodel.binder.source;
|
||||||
|
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
import org.hibernate.metamodel.domain.JavaType;
|
import org.hibernate.metamodel.domain.JavaType;
|
||||||
import org.hibernate.service.ServiceRegistry;
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
|
||||||
|
@ -44,4 +45,6 @@ public interface BindingContext {
|
||||||
public JavaType makeJavaType(String className);
|
public JavaType makeJavaType(String className);
|
||||||
|
|
||||||
public boolean isGloballyQuotedIdentifiers();
|
public boolean isGloballyQuotedIdentifiers();
|
||||||
|
|
||||||
|
public Value<Class<?>> makeClassReference(String className);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.jboss.jandex.AnnotationValue;
|
||||||
import org.jboss.jandex.Index;
|
import org.jboss.jandex.Index;
|
||||||
|
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
import org.hibernate.metamodel.binder.MappingException;
|
import org.hibernate.metamodel.binder.MappingException;
|
||||||
import org.hibernate.metamodel.binder.source.EntityDescriptor;
|
import org.hibernate.metamodel.binder.source.EntityDescriptor;
|
||||||
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
||||||
|
@ -154,4 +155,9 @@ public class AnnotationsMetadataProcessor implements AnnotationsBindingContext {
|
||||||
public JavaType makeJavaType(String className) {
|
public JavaType makeJavaType(String className) {
|
||||||
return parentBindingContext.makeJavaType( className );
|
return parentBindingContext.makeJavaType( className );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> makeClassReference(String className) {
|
||||||
|
return parentBindingContext.makeClassReference( className );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,6 +286,11 @@ public class AnnotationsSourceProcessor implements SourceProcessor, AnnotationsB
|
||||||
}
|
}
|
||||||
return javaType;
|
return javaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> makeClassReference(String className) {
|
||||||
|
return new Value<Class<?>>( locateClassByName( className ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ public abstract class AbstractEntityDescriptorImpl implements EntityDescriptor {
|
||||||
this.entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
this.entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
||||||
|
|
||||||
if ( this.entityMode == EntityMode.POJO ) {
|
if ( this.entityMode == EntityMode.POJO ) {
|
||||||
this.className = bindingContext.getClassName( verbatimClassName );
|
this.className = bindingContext.qualifyClassName( verbatimClassName );
|
||||||
this.proxyInterfaceName = entityClazz.getProxy();
|
this.proxyInterfaceName = entityClazz.getProxy();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -0,0 +1,342 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.metamodel.binder.source.hbm;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.EntityMode;
|
||||||
|
import org.hibernate.cache.spi.access.AccessType;
|
||||||
|
import org.hibernate.engine.OptimisticLockStyle;
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
import org.hibernate.metamodel.binder.MappingException;
|
||||||
|
import org.hibernate.metamodel.binder.source.hbm.xml.mapping.EntityElement;
|
||||||
|
import org.hibernate.metamodel.binder.source.hbm.xml.mapping.SubclassEntityElement;
|
||||||
|
import org.hibernate.metamodel.binding.Caching;
|
||||||
|
import org.hibernate.metamodel.binding.EntityBinding;
|
||||||
|
import org.hibernate.metamodel.binding.InheritanceType;
|
||||||
|
import org.hibernate.metamodel.domain.Entity;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLCacheElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLHibernateMapping;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLJoinedSubclassElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSqlDeleteElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSqlInsertElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSqlUpdateElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSubclassElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSynchronizeElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLTuplizerElement;
|
||||||
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLUnionSubclassElement;
|
||||||
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
|
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class BindingCreator {
|
||||||
|
private final HbmBindingContext bindingContext;
|
||||||
|
|
||||||
|
public BindingCreator(HbmBindingContext bindingContext) {
|
||||||
|
this.bindingContext = bindingContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EntityBinding createEntityBinding(EntityElement entityElement, String containingSuperEntityName) {
|
||||||
|
if ( XMLHibernateMapping.XMLClass.class.isInstance( entityElement ) ) {
|
||||||
|
return makeEntityBinding( (XMLHibernateMapping.XMLClass) entityElement );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
String superEntityName = containingSuperEntityName;
|
||||||
|
if ( superEntityName == null ) {
|
||||||
|
final SubclassEntityElement subclass = (SubclassEntityElement) entityElement;
|
||||||
|
superEntityName = bindingContext.qualifyClassName( subclass.getExtends() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( superEntityName == null) {
|
||||||
|
throw new MappingException(
|
||||||
|
"Encountered inheritance strategy, but no super type found",
|
||||||
|
bindingContext.getOrigin()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( XMLSubclassElement.class.isInstance( entityElement ) ) {
|
||||||
|
return makeEntityBinding( (XMLSubclassElement) entityElement, superEntityName );
|
||||||
|
}
|
||||||
|
else if ( XMLJoinedSubclassElement.class.isInstance( entityElement ) ) {
|
||||||
|
return makeEntityBinding( (XMLJoinedSubclassElement) entityElement, superEntityName );
|
||||||
|
}
|
||||||
|
else if ( XMLUnionSubclassElement.class.isInstance( entityElement ) ) {
|
||||||
|
return makeEntityBinding( (XMLUnionSubclassElement) entityElement, superEntityName );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new MappingException(
|
||||||
|
"unknown type of class or subclass: " + entityElement.getClass().getName(),
|
||||||
|
bindingContext.getOrigin()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntityBinding makeEntityBinding(XMLHibernateMapping.XMLClass xmlClass) {
|
||||||
|
final EntityBinding entityBinding = new EntityBinding();
|
||||||
|
entityBinding.setInheritanceType( InheritanceType.NO_INHERITANCE );
|
||||||
|
|
||||||
|
final String entityName = bindingContext.determineEntityName( xmlClass );
|
||||||
|
final String verbatimClassName = xmlClass.getName();
|
||||||
|
|
||||||
|
final EntityMode entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
||||||
|
entityBinding.setEntityMode( entityMode );
|
||||||
|
|
||||||
|
final String className;
|
||||||
|
if ( entityMode == EntityMode.POJO ) {
|
||||||
|
className = bindingContext.qualifyClassName( verbatimClassName );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
className = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Entity entity = new Entity( entityName, className, bindingContext.makeClassReference( className ), null );
|
||||||
|
entityBinding.setEntity( entity );
|
||||||
|
|
||||||
|
performBasicEntityBind( entityBinding, xmlClass );
|
||||||
|
|
||||||
|
entityBinding.setMutable( xmlClass.isMutable() );
|
||||||
|
entityBinding.setExplicitPolymorphism( "explicit".equals( xmlClass.getPolymorphism() ) );
|
||||||
|
entityBinding.setWhereFilter( xmlClass.getWhere() );
|
||||||
|
entityBinding.setRowId( xmlClass.getRowid() );
|
||||||
|
entityBinding.setOptimisticLockStyle( interpretOptimisticLockStyle( xmlClass ) );
|
||||||
|
entityBinding.setCaching( interpretCaching( xmlClass, entityName ) );
|
||||||
|
|
||||||
|
return entityBinding;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Caching interpretCaching(XMLHibernateMapping.XMLClass xmlClass, String entityName) {
|
||||||
|
final XMLCacheElement cache = xmlClass.getCache();
|
||||||
|
if ( cache == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final String region = cache.getRegion() != null ? cache.getRegion() : entityName;
|
||||||
|
final AccessType accessType = Enum.valueOf( AccessType.class, cache.getUsage() );
|
||||||
|
final boolean cacheLazyProps = !"non-lazy".equals( cache.getInclude() );
|
||||||
|
return new Caching( region, accessType, cacheLazyProps );
|
||||||
|
}
|
||||||
|
|
||||||
|
private OptimisticLockStyle interpretOptimisticLockStyle(XMLHibernateMapping.XMLClass entityClazz) {
|
||||||
|
final String optimisticLockModeString = MappingHelper.getStringValue(
|
||||||
|
entityClazz.getOptimisticLock(),
|
||||||
|
"version"
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
return OptimisticLockStyle.valueOf( optimisticLockModeString.toUpperCase() );
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
throw new MappingException(
|
||||||
|
"Unknown optimistic-lock value : " + optimisticLockModeString,
|
||||||
|
bindingContext.getOrigin()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntityBinding makeEntityBinding(XMLSubclassElement subclassElement, String superEntityName) {
|
||||||
|
// temporary!!!
|
||||||
|
|
||||||
|
final EntityBinding entityBinding = new EntityBinding();
|
||||||
|
entityBinding.setInheritanceType( InheritanceType.SINGLE_TABLE );
|
||||||
|
|
||||||
|
final String entityName = bindingContext.determineEntityName( subclassElement );
|
||||||
|
final String verbatimClassName = subclassElement.getName();
|
||||||
|
|
||||||
|
final EntityMode entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
||||||
|
entityBinding.setEntityMode( entityMode );
|
||||||
|
|
||||||
|
final String className;
|
||||||
|
if ( entityMode == EntityMode.POJO ) {
|
||||||
|
className = bindingContext.qualifyClassName( verbatimClassName );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
className = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Entity entity = new Entity( entityName, className, bindingContext.makeClassReference( className ), null );
|
||||||
|
entityBinding.setEntity( entity );
|
||||||
|
|
||||||
|
|
||||||
|
performBasicEntityBind( entityBinding, subclassElement );
|
||||||
|
|
||||||
|
return entityBinding;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntityBinding makeEntityBinding(XMLJoinedSubclassElement joinedEntityElement, String superEntityName) {
|
||||||
|
// temporary!!!
|
||||||
|
|
||||||
|
final EntityBinding entityBinding = new EntityBinding();
|
||||||
|
entityBinding.setInheritanceType( InheritanceType.JOINED );
|
||||||
|
|
||||||
|
final String entityName = bindingContext.determineEntityName( joinedEntityElement );
|
||||||
|
final String verbatimClassName = joinedEntityElement.getName();
|
||||||
|
|
||||||
|
final EntityMode entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
||||||
|
entityBinding.setEntityMode( entityMode );
|
||||||
|
|
||||||
|
final String className;
|
||||||
|
if ( entityMode == EntityMode.POJO ) {
|
||||||
|
className = bindingContext.qualifyClassName( verbatimClassName );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
className = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Entity entity = new Entity( entityName, className, bindingContext.makeClassReference( className ), null );
|
||||||
|
entityBinding.setEntity( entity );
|
||||||
|
|
||||||
|
performBasicEntityBind( entityBinding, joinedEntityElement );
|
||||||
|
|
||||||
|
return entityBinding;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected EntityBinding makeEntityBinding(XMLUnionSubclassElement unionEntityElement, String superEntityName) {
|
||||||
|
// temporary!!!
|
||||||
|
|
||||||
|
final EntityBinding entityBinding = new EntityBinding();
|
||||||
|
entityBinding.setInheritanceType( InheritanceType.TABLE_PER_CLASS );
|
||||||
|
|
||||||
|
final String entityName = bindingContext.determineEntityName( unionEntityElement );
|
||||||
|
final String verbatimClassName = unionEntityElement.getName();
|
||||||
|
|
||||||
|
final EntityMode entityMode = verbatimClassName == null ? EntityMode.MAP : EntityMode.POJO;
|
||||||
|
entityBinding.setEntityMode( entityMode );
|
||||||
|
|
||||||
|
final String className;
|
||||||
|
if ( entityMode == EntityMode.POJO ) {
|
||||||
|
className = bindingContext.qualifyClassName( verbatimClassName );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
className = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Entity entity = new Entity( entityName, className, bindingContext.makeClassReference( className ), null );
|
||||||
|
entityBinding.setEntity( entity );
|
||||||
|
|
||||||
|
performBasicEntityBind( entityBinding, unionEntityElement );
|
||||||
|
|
||||||
|
return entityBinding;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings( {"unchecked"})
|
||||||
|
protected void performBasicEntityBind(EntityBinding entityBinding, EntityElement entityElement) {
|
||||||
|
entityBinding.setJpaEntityName( null );
|
||||||
|
|
||||||
|
final String proxy = entityElement.getProxy();
|
||||||
|
final Boolean isLazy = entityElement.isLazy();
|
||||||
|
if ( entityBinding.getEntityMode() == EntityMode.POJO ) {
|
||||||
|
if ( proxy != null ) {
|
||||||
|
entityBinding.setProxyInterfaceType( bindingContext.makeClassReference(
|
||||||
|
bindingContext.qualifyClassName(
|
||||||
|
proxy
|
||||||
|
)
|
||||||
|
) );
|
||||||
|
entityBinding.setLazy( true );
|
||||||
|
}
|
||||||
|
else if ( isLazy ) {
|
||||||
|
entityBinding.setProxyInterfaceType( entityBinding.getEntity().getClassReferenceUnresolved() );
|
||||||
|
entityBinding.setLazy( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
entityBinding.setProxyInterfaceType( new Value( Map.class ) );
|
||||||
|
entityBinding.setLazy( isLazy );
|
||||||
|
}
|
||||||
|
|
||||||
|
final String customTuplizerClassName = extractCustomTuplizerClassName( entityElement, entityBinding.getEntityMode() );
|
||||||
|
if ( customTuplizerClassName != null ) {
|
||||||
|
entityBinding.setCustomEntityTuplizerClass( bindingContext.<EntityTuplizer>locateClassByName( customTuplizerClassName ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( entityElement.getPersister() != null ) {
|
||||||
|
entityBinding.setCustomEntityPersisterClass( bindingContext.<EntityPersister>locateClassByName( entityElement.getPersister() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
entityBinding.setMetaAttributeContext(
|
||||||
|
HbmHelper.extractMetaAttributeContext(
|
||||||
|
entityElement.getMeta(), true, bindingContext.getMetaAttributeContext()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
entityBinding.setDynamicUpdate( entityElement.isDynamicUpdate() );
|
||||||
|
entityBinding.setDynamicInsert( entityElement.isDynamicInsert() );
|
||||||
|
entityBinding.setBatchSize( MappingHelper.getIntValue( entityElement.getBatchSize(), 0 ) );
|
||||||
|
entityBinding.setSelectBeforeUpdate( entityElement.isSelectBeforeUpdate() );
|
||||||
|
entityBinding.setAbstract( entityElement.isAbstract() );
|
||||||
|
|
||||||
|
entityBinding.setCustomLoaderName( entityElement.getLoader().getQueryRef() );
|
||||||
|
|
||||||
|
final XMLSqlInsertElement sqlInsert = entityElement.getSqlInsert();
|
||||||
|
if ( sqlInsert != null ) {
|
||||||
|
entityBinding.setCustomInsert(
|
||||||
|
HbmHelper.getCustomSql(
|
||||||
|
sqlInsert.getValue(),
|
||||||
|
sqlInsert.isCallable(),
|
||||||
|
sqlInsert.getCheck().value()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final XMLSqlDeleteElement sqlDelete = entityElement.getSqlDelete();
|
||||||
|
if ( sqlDelete != null ) {
|
||||||
|
entityBinding.setCustomDelete(
|
||||||
|
HbmHelper.getCustomSql(
|
||||||
|
sqlDelete.getValue(),
|
||||||
|
sqlDelete.isCallable(),
|
||||||
|
sqlDelete.getCheck().value()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final XMLSqlUpdateElement sqlUpdate = entityElement.getSqlUpdate();
|
||||||
|
if ( sqlUpdate != null ) {
|
||||||
|
entityBinding.setCustomUpdate(
|
||||||
|
HbmHelper.getCustomSql(
|
||||||
|
sqlUpdate.getValue(),
|
||||||
|
sqlUpdate.isCallable(),
|
||||||
|
sqlUpdate.getCheck().value()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( entityElement.getSynchronize() != null ) {
|
||||||
|
for ( XMLSynchronizeElement synchronize : entityElement.getSynchronize() ) {
|
||||||
|
entityBinding.addSynchronizedTable( synchronize.getTable() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String extractCustomTuplizerClassName(EntityElement entityMapping, EntityMode entityMode) {
|
||||||
|
if ( entityMapping.getTuplizer() == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for ( XMLTuplizerElement tuplizerElement : entityMapping.getTuplizer() ) {
|
||||||
|
if ( entityMode == EntityMode.parse( tuplizerElement.getEntityMode() ) ) {
|
||||||
|
return tuplizerElement.getClazz();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,7 +45,7 @@ public interface HbmBindingContext extends BindingContext {
|
||||||
|
|
||||||
public String determineEntityName(EntityElement entityElement);
|
public String determineEntityName(EntityElement entityElement);
|
||||||
|
|
||||||
public String getClassName(String unqualifiedName);
|
public String qualifyClassName(String unqualifiedName);
|
||||||
|
|
||||||
public void processFetchProfiles(List<XMLFetchProfileElement> fetchProfiles, String containingEntityName);
|
public void processFetchProfiles(List<XMLFetchProfileElement> fetchProfiles, String containingEntityName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
import org.hibernate.metamodel.MetadataSources;
|
import org.hibernate.metamodel.MetadataSources;
|
||||||
import org.hibernate.metamodel.binder.source.BindingContext;
|
import org.hibernate.metamodel.binder.source.BindingContext;
|
||||||
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
||||||
|
@ -210,4 +211,9 @@ public class HbmSourceProcessorImpl implements SourceProcessor, BindingContext {
|
||||||
public JavaType makeJavaType(String className) {
|
public JavaType makeJavaType(String className) {
|
||||||
return metadata.makeJavaType( className );
|
return metadata.makeJavaType( className );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> makeClassReference(String className) {
|
||||||
|
return metadata.makeClassReference( className );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,10 +33,8 @@ import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.internal.util.Value;
|
import org.hibernate.internal.util.Value;
|
||||||
import org.hibernate.metamodel.binder.EntityBinder;
|
|
||||||
import org.hibernate.metamodel.binder.MappingException;
|
import org.hibernate.metamodel.binder.MappingException;
|
||||||
import org.hibernate.metamodel.binder.Origin;
|
import org.hibernate.metamodel.binder.Origin;
|
||||||
import org.hibernate.metamodel.binder.source.EntityDescriptor;
|
|
||||||
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
import org.hibernate.metamodel.binder.source.MappingDefaults;
|
||||||
import org.hibernate.metamodel.binder.source.MetaAttributeContext;
|
import org.hibernate.metamodel.binder.source.MetaAttributeContext;
|
||||||
import org.hibernate.metamodel.binder.source.MetadataImplementor;
|
import org.hibernate.metamodel.binder.source.MetadataImplementor;
|
||||||
|
@ -79,7 +77,7 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
private final MetaAttributeContext metaAttributeContext;
|
private final MetaAttributeContext metaAttributeContext;
|
||||||
|
|
||||||
|
|
||||||
private final EntityBinder entityBinder;
|
private final BindingCreator bindingCreator;
|
||||||
|
|
||||||
private final boolean autoImport;
|
private final boolean autoImport;
|
||||||
|
|
||||||
|
@ -102,7 +100,7 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
|
|
||||||
this.autoImport = hibernateMapping.isAutoImport();
|
this.autoImport = hibernateMapping.isAutoImport();
|
||||||
|
|
||||||
this.entityBinder = new EntityBinder( this );
|
this.bindingCreator = new BindingCreator( this );
|
||||||
|
|
||||||
this.metaAttributeContext = extractMetaAttributes();
|
this.metaAttributeContext = extractMetaAttributes();
|
||||||
}
|
}
|
||||||
|
@ -167,6 +165,11 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
return getMetadataImplementor().makeJavaType( className );
|
return getMetadataImplementor().makeJavaType( className );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> makeClassReference(String className) {
|
||||||
|
return getMetadataImplementor().makeClassReference( className );
|
||||||
|
}
|
||||||
|
|
||||||
public void processIndependentMetadata() {
|
public void processIndependentMetadata() {
|
||||||
processDatabaseObjectDefinitions();
|
processDatabaseObjectDefinitions();
|
||||||
processTypeDefinitions();
|
processTypeDefinitions();
|
||||||
|
@ -289,37 +292,12 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
for ( Object entityElementO : hibernateMapping.getClazzOrSubclassOrJoinedSubclass() ) {
|
for ( Object entityElementO : hibernateMapping.getClazzOrSubclassOrJoinedSubclass() ) {
|
||||||
final EntityElement entityElement = (EntityElement) entityElementO;
|
final EntityElement entityElement = (EntityElement) entityElementO;
|
||||||
|
|
||||||
// determine the type of root element we have and build appropriate entity descriptor. Might be:
|
final String entityName = this.determineEntityName( entityElement );
|
||||||
// 1) <class/>
|
if ( processedEntityNames.contains( entityName ) ) {
|
||||||
// 2) <subclass/>
|
|
||||||
// 3) <joined-subclass/>
|
|
||||||
// 4) <union-subclass/>
|
|
||||||
|
|
||||||
final EntityDescriptor entityDescriptor;
|
|
||||||
if ( XMLHibernateMapping.XMLClass.class.isInstance( entityElement ) ) {
|
|
||||||
entityDescriptor = new RootEntityDescriptorImpl( entityElement, this );
|
|
||||||
}
|
|
||||||
else if ( XMLSubclassElement.class.isInstance( entityElement ) ) {
|
|
||||||
entityDescriptor = new DiscriminatedSubClassEntityDescriptorImpl( entityElement, this );
|
|
||||||
}
|
|
||||||
else if ( XMLJoinedSubclassElement.class.isInstance( entityElement ) ) {
|
|
||||||
entityDescriptor = new JoinedSubClassEntityDescriptorImpl( entityElement, this );
|
|
||||||
}
|
|
||||||
else if ( XMLUnionSubclassElement.class.isInstance( entityElement ) ) {
|
|
||||||
entityDescriptor = new UnionSubClassEntityDescriptorImpl( entityElement, this );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new MappingException(
|
|
||||||
"unknown type of class or subclass: " + entityElement.getClass().getName(),
|
|
||||||
jaxbRoot.getOrigin()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( processedEntityNames.contains( entityDescriptor.getEntityName() ) ) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final EntityBinding entityBinding = entityBinder.createEntityBinding( entityDescriptor );
|
final EntityBinding entityBinding = bindingCreator.createEntityBinding( entityElement, null );
|
||||||
getMetadataImplementor().addEntity( entityBinding );
|
getMetadataImplementor().addEntity( entityBinding );
|
||||||
processedEntityNames.add( entityBinding.getEntity().getName() );
|
processedEntityNames.add( entityBinding.getEntity().getName() );
|
||||||
}
|
}
|
||||||
|
@ -363,7 +341,7 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for ( XMLHibernateMapping.XMLImport importValue : hibernateMapping.getImport() ) {
|
for ( XMLHibernateMapping.XMLImport importValue : hibernateMapping.getImport() ) {
|
||||||
String className = getClassName( importValue.getClazz() );
|
String className = qualifyClassName( importValue.getClazz() );
|
||||||
String rename = importValue.getRename();
|
String rename = importValue.getRename();
|
||||||
rename = ( rename == null ) ? StringHelper.unqualify( className ) : rename;
|
rename = ( rename == null ) ? StringHelper.unqualify( className ) : rename;
|
||||||
getMetadataImplementor().addImport( className, rename );
|
getMetadataImplementor().addImport( className, rename );
|
||||||
|
@ -407,7 +385,7 @@ public class HibernateMappingProcessor implements HbmBindingContext {
|
||||||
);
|
);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getClassName(String unqualifiedName) {
|
public String qualifyClassName(String unqualifiedName) {
|
||||||
return HbmHelper.getClassName( unqualifiedName, mappingDefaults.getPackageName() );
|
return HbmHelper.getClassName( unqualifiedName, mappingDefaults.getPackageName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -349,6 +349,18 @@ public class MetadataImpl implements MetadataImplementor, Serializable {
|
||||||
return new JavaType( className, classLoaderService() );
|
return new JavaType( className, classLoaderService() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> makeClassReference(final String className) {
|
||||||
|
return new Value<Class<?>>(
|
||||||
|
new Value.DeferredInitializer<Class<?>>() {
|
||||||
|
@Override
|
||||||
|
public Class<?> initialize() {
|
||||||
|
return classLoaderService.getValue().classForName( className );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Database getDatabase() {
|
public Database getDatabase() {
|
||||||
return database;
|
return database;
|
||||||
|
|
|
@ -33,10 +33,10 @@ import org.hibernate.EntityMode;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.engine.OptimisticLockStyle;
|
import org.hibernate.engine.OptimisticLockStyle;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
import org.hibernate.metamodel.binder.source.MetaAttributeContext;
|
import org.hibernate.metamodel.binder.source.MetaAttributeContext;
|
||||||
import org.hibernate.metamodel.domain.Attribute;
|
import org.hibernate.metamodel.domain.Attribute;
|
||||||
import org.hibernate.metamodel.domain.Entity;
|
import org.hibernate.metamodel.domain.Entity;
|
||||||
import org.hibernate.metamodel.domain.JavaType;
|
|
||||||
import org.hibernate.metamodel.relational.Column;
|
import org.hibernate.metamodel.relational.Column;
|
||||||
import org.hibernate.metamodel.relational.TableSpecification;
|
import org.hibernate.metamodel.relational.TableSpecification;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
|
@ -54,7 +54,7 @@ public class EntityBinding {
|
||||||
private TableSpecification baseTable;
|
private TableSpecification baseTable;
|
||||||
|
|
||||||
private EntityMode entityMode;
|
private EntityMode entityMode;
|
||||||
private JavaType proxyInterfaceType;
|
private Value<Class<?>> proxyInterfaceType;
|
||||||
|
|
||||||
private String jpaEntityName;
|
private String jpaEntityName;
|
||||||
|
|
||||||
|
@ -342,11 +342,11 @@ public class EntityBinding {
|
||||||
this.lazy = lazy;
|
this.lazy = lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JavaType getProxyInterfaceType() {
|
public Value<Class<?>> getProxyInterfaceType() {
|
||||||
return proxyInterfaceType;
|
return proxyInterfaceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setProxyInterfaceType(JavaType proxyInterfaceType) {
|
public void setProxyInterfaceType(Value<Class<?>> proxyInterfaceType) {
|
||||||
this.proxyInterfaceType = proxyInterfaceType;
|
this.proxyInterfaceType = proxyInterfaceType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenient base class for {@link AttributeContainer}. Because in our model all
|
* Convenient base class for {@link AttributeContainer}. Because in our model all
|
||||||
* {@link AttributeContainer AttributeContainers} are also {@link Hierarchical} we also implement that here
|
* {@link AttributeContainer AttributeContainers} are also {@link Hierarchical} we also implement that here
|
||||||
|
@ -37,12 +39,16 @@ import java.util.Set;
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractAttributeContainer implements AttributeContainer, Hierarchical {
|
public abstract class AbstractAttributeContainer implements AttributeContainer, Hierarchical {
|
||||||
private final String name;
|
private final String name;
|
||||||
|
private final String className;
|
||||||
|
private final Value<Class<?>> classReference;
|
||||||
private final Hierarchical superType;
|
private final Hierarchical superType;
|
||||||
private LinkedHashSet<Attribute> attributeSet = new LinkedHashSet<Attribute>();
|
private LinkedHashSet<Attribute> attributeSet = new LinkedHashSet<Attribute>();
|
||||||
private HashMap<String, Attribute> attributeMap = new HashMap<String, Attribute>();
|
private HashMap<String, Attribute> attributeMap = new HashMap<String, Attribute>();
|
||||||
|
|
||||||
public AbstractAttributeContainer(String name, Hierarchical superType) {
|
public AbstractAttributeContainer(String name, String className, Value<Class<?>> classReference, Hierarchical superType) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.className = className;
|
||||||
|
this.classReference = classReference;
|
||||||
this.superType = superType;
|
this.superType = superType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +57,21 @@ public abstract class AbstractAttributeContainer implements AttributeContainer,
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getClassName() {
|
||||||
|
return className;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getClassReference() {
|
||||||
|
return classReference.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> getClassReferenceUnresolved() {
|
||||||
|
return classReference;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Hierarchical getSuperType() {
|
public Hierarchical getSuperType() {
|
||||||
return superType;
|
return superType;
|
||||||
|
|
|
@ -23,29 +23,49 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models a basic type.
|
* Models a basic type.
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class BasicType implements Type {
|
public class BasicType implements Type {
|
||||||
private final JavaType javaType;
|
private final String name;
|
||||||
|
private final Value<Class<?>> classReference;
|
||||||
|
|
||||||
public BasicType(JavaType javaType) {
|
public BasicType(String name, Value<Class<?>> classReference) {
|
||||||
this.javaType = javaType;
|
this.name = name;
|
||||||
|
this.classReference = classReference;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return javaType.getName();
|
return name;
|
||||||
}
|
|
||||||
|
|
||||||
public JavaType getJavaType() {
|
|
||||||
return javaType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeNature getNature() {
|
public String getClassName() {
|
||||||
return TypeNature.BASIC;
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getClassReference() {
|
||||||
|
return classReference.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value<Class<?>> getClassReferenceUnresolved() {
|
||||||
|
return classReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAssociation() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isComponent() {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the notion of a component (what JPA calls an Embeddable).
|
* Models the notion of a component (what JPA calls an Embeddable).
|
||||||
* <p/>
|
* <p/>
|
||||||
|
@ -31,12 +33,17 @@ package org.hibernate.metamodel.domain;
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class Component extends AbstractAttributeContainer implements Hierarchical {
|
public class Component extends AbstractAttributeContainer implements Hierarchical {
|
||||||
public Component(String name, Hierarchical superType) {
|
public Component(String name, String className, Value<Class<?>> classReference, Hierarchical superType) {
|
||||||
super( name, superType );
|
super( name, className, classReference, superType );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeNature getNature() {
|
public boolean isAssociation() {
|
||||||
return TypeNature.COMPONENT;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isComponent() {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the notion of an entity
|
* Models the notion of an entity
|
||||||
*
|
*
|
||||||
|
@ -30,27 +32,25 @@ package org.hibernate.metamodel.domain;
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class Entity extends AbstractAttributeContainer {
|
public class Entity extends AbstractAttributeContainer {
|
||||||
final JavaType javaType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for the entity
|
* Constructor for the entity
|
||||||
*
|
*
|
||||||
* @param name the name of the entity
|
* @param entityName The name of the entity
|
||||||
* @param superType the super type for this entity. If there is not super type {@code null} needs to be passed.
|
* @param className The name of this entity's java class
|
||||||
* @param javaType the java type of the entity
|
* @param classReference The reference to this entity's {@link Class}
|
||||||
|
* @param superType The super type for this entity. If there is not super type {@code null} needs to be passed.
|
||||||
*/
|
*/
|
||||||
public Entity(String name, Hierarchical superType, JavaType javaType) {
|
public Entity(String entityName, String className, Value<Class<?>> classReference, Hierarchical superType) {
|
||||||
super( name, superType );
|
super( entityName, className, classReference, superType );
|
||||||
this.javaType = javaType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypeNature getNature() {
|
public boolean isAssociation() {
|
||||||
return TypeNature.ENTITY;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JavaType getJavaType() {
|
@Override
|
||||||
return javaType;
|
public boolean isComponent() {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,20 +23,33 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the concept class in the hierarchy with no persistent attributes.
|
* Models the concept class in the hierarchy with no persistent attributes.
|
||||||
*
|
*
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class NonEntity extends AbstractAttributeContainer implements Hierarchical {
|
public class NonEntity extends AbstractAttributeContainer implements Hierarchical {
|
||||||
public NonEntity(String name, Hierarchical superType) {
|
/**
|
||||||
super( name, superType );
|
* Constructor for the non-entity
|
||||||
|
*
|
||||||
|
* @param entityName The name of the non-entity
|
||||||
|
* @param className The name of this non-entity's java class
|
||||||
|
* @param classReference The reference to this non-entity's {@link Class}
|
||||||
|
* @param superType The super type for this non-entity. If there is not super type {@code null} needs to be passed.
|
||||||
|
*/
|
||||||
|
public NonEntity(String entityName, String className, Value<Class<?>> classReference, Hierarchical superType) {
|
||||||
|
super( entityName, className, classReference, superType );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* {@inheritDoc}
|
public boolean isAssociation() {
|
||||||
*/
|
return true;
|
||||||
public TypeNature getNature() {
|
}
|
||||||
return TypeNature.NON_ENTITY;
|
|
||||||
|
@Override
|
||||||
|
public boolean isComponent() {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,20 +23,33 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the concept of a (intermediate) superclass
|
* Models the concept of a (intermediate) superclass
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class Superclass extends AbstractAttributeContainer implements Hierarchical {
|
public class Superclass extends AbstractAttributeContainer implements Hierarchical {
|
||||||
public Superclass(String name, Hierarchical superType) {
|
/**
|
||||||
super( name, superType );
|
* Constructor for the entity
|
||||||
|
*
|
||||||
|
* @param entityName The name of the entity
|
||||||
|
* @param className The name of this entity's java class
|
||||||
|
* @param classReference The reference to this entity's {@link Class}
|
||||||
|
* @param superType The super type for this entity. If there is not super type {@code null} needs to be passed.
|
||||||
|
*/
|
||||||
|
public Superclass(String entityName, String className, Value<Class<?>> classReference, Hierarchical superType) {
|
||||||
|
super( entityName, className, classReference, superType );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* {@inheritDoc}
|
public boolean isAssociation() {
|
||||||
*/
|
return true;
|
||||||
public TypeNature getNature() {
|
}
|
||||||
return TypeNature.SUPERCLASS;
|
|
||||||
|
@Override
|
||||||
|
public boolean isComponent() {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.domain;
|
package org.hibernate.metamodel.domain;
|
||||||
|
|
||||||
|
import org.hibernate.internal.util.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic information about a Java type, in regards to its role in particular set of mappings.
|
* Basic information about a Java type, in regards to its role in particular set of mappings.
|
||||||
*
|
*
|
||||||
|
@ -30,16 +32,32 @@ package org.hibernate.metamodel.domain;
|
||||||
*/
|
*/
|
||||||
public interface Type {
|
public interface Type {
|
||||||
/**
|
/**
|
||||||
* Get the name of the type.
|
* Obtain the name of the type.
|
||||||
*
|
*
|
||||||
* @return The name
|
* @return The name
|
||||||
*/
|
*/
|
||||||
public String getName();
|
public String getName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the persistence type.
|
* Obtain the java class name for this type.
|
||||||
*
|
*
|
||||||
* @return persistence type
|
* @return The class name
|
||||||
*/
|
*/
|
||||||
public TypeNature getNature();
|
public String getClassName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the java {@link Class} reference for this type
|
||||||
|
*
|
||||||
|
* @return The {@link Class} reference
|
||||||
|
*
|
||||||
|
* @throws org.hibernate.service.classloading.spi.ClassLoadingException Indicates the class reference
|
||||||
|
* could not be determined. Generally this is the case in reverse-engineering scenarios where the specified
|
||||||
|
* domain model classes do not yet exist.
|
||||||
|
*/
|
||||||
|
public Class<?> getClassReference();
|
||||||
|
|
||||||
|
public Value<Class<?>> getClassReferenceUnresolved();
|
||||||
|
|
||||||
|
public boolean isAssociation();
|
||||||
|
public boolean isComponent();
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,10 +377,10 @@ public class EntityMetamodel implements Serializable {
|
||||||
Class<?> mappedClass = null;
|
Class<?> mappedClass = null;
|
||||||
Class<?> proxyInterfaceClass = null;
|
Class<?> proxyInterfaceClass = null;
|
||||||
boolean lazyAvailable = false;
|
boolean lazyAvailable = false;
|
||||||
if ( entityBinding.getEntity().getJavaType() != null ) {
|
if ( entityBinding.getEntity().getClassReferenceUnresolved() != null ) {
|
||||||
hasPojoRepresentation = true;
|
hasPojoRepresentation = true;
|
||||||
mappedClass = entityBinding.getEntity().getJavaType().getClassReference();
|
mappedClass = entityBinding.getEntity().getClassReference();
|
||||||
proxyInterfaceClass = entityBinding.getProxyInterfaceType().getClassReference();
|
proxyInterfaceClass = entityBinding.getProxyInterfaceType().getValue();
|
||||||
lazyAvailable = FieldInterceptionHelper.isInstrumented( mappedClass );
|
lazyAvailable = FieldInterceptionHelper.isInstrumented( mappedClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -698,7 +698,7 @@ public class EntityMetamodel implements Serializable {
|
||||||
private void mapPropertyToIndex(Attribute attribute, int i) {
|
private void mapPropertyToIndex(Attribute attribute, int i) {
|
||||||
propertyIndexes.put( attribute.getName(), i );
|
propertyIndexes.put( attribute.getName(), i );
|
||||||
if ( attribute.isSingular() &&
|
if ( attribute.isSingular() &&
|
||||||
( ( SingularAttribute ) attribute ).getSingularAttributeType().getNature() == TypeNature.COMPONENT ) {
|
( ( SingularAttribute ) attribute ).getSingularAttributeType().isComponent() ) {
|
||||||
org.hibernate.metamodel.domain.Component component =
|
org.hibernate.metamodel.domain.Component component =
|
||||||
( org.hibernate.metamodel.domain.Component ) ( ( SingularAttribute ) attribute ).getSingularAttributeType();
|
( org.hibernate.metamodel.domain.Component ) ( ( SingularAttribute ) attribute ).getSingularAttributeType();
|
||||||
for ( Attribute subAttribute : component.getAttributes() ) {
|
for ( Attribute subAttribute : component.getAttributes() ) {
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<jxb:bindings version="1.0"
|
|
||||||
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
|
|
||||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
||||||
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
|
|
||||||
jxb:extensionBindingPrefixes="xjc">
|
|
||||||
|
|
||||||
<jxb:bindings schemaLocation="../resources/org/hibernate/hibernate-configuration-4.0.xsd" node="/xs:schema">
|
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
|
||||||
<jxb:schemaBindings>
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
<jxb:nameXmlTransform>
|
jaxb:version="2.1">
|
||||||
<jxb:typeName prefix="XML"/>
|
|
||||||
<jxb:elementName prefix="XML"/>
|
|
||||||
<jxb:modelGroupName prefix="XML"/>
|
|
||||||
<jxb:anonymousTypeName prefix="XML"/>
|
|
||||||
</jxb:nameXmlTransform>
|
|
||||||
</jxb:schemaBindings>
|
|
||||||
</jxb:bindings>
|
|
||||||
|
|
||||||
</jxb:bindings>
|
<jaxb:bindings schemaLocation="../resources/org/hibernate/hibernate-configuration-4.0.xsd" node="/xsd:schema">
|
||||||
|
<jaxb:schemaBindings>
|
||||||
|
<jaxb:nameXmlTransform>
|
||||||
|
<jaxb:typeName prefix="XML"/>
|
||||||
|
<jaxb:elementName prefix="XML"/>
|
||||||
|
<jaxb:modelGroupName prefix="XML"/>
|
||||||
|
<jaxb:anonymousTypeName prefix="XML"/>
|
||||||
|
</jaxb:nameXmlTransform>
|
||||||
|
</jaxb:schemaBindings>
|
||||||
|
</jaxb:bindings>
|
||||||
|
|
||||||
|
</jaxb:bindings>
|
|
@ -1,103 +1,120 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<jxb:bindings version="1.0"
|
|
||||||
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
|
|
||||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
||||||
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
|
|
||||||
jxb:extensionBindingPrefixes="xjc">
|
|
||||||
|
|
||||||
<jxb:bindings schemaLocation="../resources/org/hibernate/hibernate-mapping-4.0.xsd" node="/xs:schema">
|
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
|
||||||
<jxb:schemaBindings>
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
<jxb:nameXmlTransform>
|
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
|
||||||
<jxb:typeName prefix="XML"/>
|
jaxb:extensionBindingPrefixes="inheritance"
|
||||||
<jxb:elementName prefix="XML"/>
|
jaxb:version="2.1">
|
||||||
<jxb:modelGroupName prefix="XML"/>
|
|
||||||
<jxb:anonymousTypeName prefix="XML"/>
|
|
||||||
</jxb:nameXmlTransform>
|
|
||||||
</jxb:schemaBindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='class']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='discriminator']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='discriminator']//xs:attribute[@name='formula']">
|
|
||||||
<jxb:property name="formulaAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='id']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='id']//xs:attribute[@name='type']">
|
|
||||||
<jxb:property name="typeAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:element[@name='version']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='array-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='bag-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='element-element']//xs:attribute[@name='type']">
|
|
||||||
<jxb:property name="typeAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='idbag-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='idbag-element']//xs:element[@name='collection-id']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='index-element']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='join-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='joined-subclass-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='key-element']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='key-many-to-one-element']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='key-property-element']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='key-property-element']//xs:attribute[@name='type']">
|
|
||||||
<jxb:property name="typeAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='list-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='list-index-element']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='map-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='map-element']//xs:element[@name='map-key']//xs:attribute[@name='type']">
|
|
||||||
<jxb:property name="typeAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='map-element']//xs:element[@name='index-many-to-many']//xs:attribute[@name='column']">
|
|
||||||
<jxb:property name="columnAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='one-to-one-element']//xs:attribute[@name='formula']">
|
|
||||||
<jxb:property name="formulaAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='primitive-array-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='property-element']//xs:attribute[@name='type']">
|
|
||||||
<jxb:property name="typeAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='set-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
<jxb:bindings node="//xs:complexType[@name='union-subclass-element']//xs:attribute[@name='subselect']">
|
|
||||||
<jxb:property name="subselectAttribute"/>
|
|
||||||
</jxb:bindings>
|
|
||||||
</jxb:bindings>
|
|
||||||
|
|
||||||
</jxb:bindings>
|
<jaxb:bindings schemaLocation="../resources/org/hibernate/hibernate-mapping-4.0.xsd" node="/xsd:schema">
|
||||||
|
|
||||||
|
<jaxb:schemaBindings>
|
||||||
|
<jaxb:nameXmlTransform>
|
||||||
|
<jaxb:typeName prefix="XML"/>
|
||||||
|
<jaxb:elementName prefix="XML"/>
|
||||||
|
<jaxb:modelGroupName prefix="XML"/>
|
||||||
|
<jaxb:anonymousTypeName prefix="XML"/>
|
||||||
|
</jaxb:nameXmlTransform>
|
||||||
|
</jaxb:schemaBindings>
|
||||||
|
|
||||||
|
<!-- Inheritance -->
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='class']/xsd:complexType">
|
||||||
|
<inheritance:implements>org.hibernate.metamodel.binder.source.hbm.xml.mapping.EntityElement</inheritance:implements>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='subclass-element']">
|
||||||
|
<inheritance:implements>org.hibernate.metamodel.binder.source.hbm.xml.mapping.SubclassEntityElement</inheritance:implements>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='joined-subclass-element']">
|
||||||
|
<inheritance:implements>org.hibernate.metamodel.binder.source.hbm.xml.mapping.SubclassEntityElement</inheritance:implements>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='union-subclass-element']">
|
||||||
|
<inheritance:implements>org.hibernate.metamodel.binder.source.hbm.xml.mapping.SubclassEntityElement</inheritance:implements>
|
||||||
|
</jaxb:bindings>
|
||||||
|
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='class']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='discriminator']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='discriminator']//xsd:attribute[@name='formula']">
|
||||||
|
<jaxb:property name="formulaAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='id']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='id']//xsd:attribute[@name='type']">
|
||||||
|
<jaxb:property name="typeAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:element[@name='version']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='array-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='bag-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='element-element']//xsd:attribute[@name='type']">
|
||||||
|
<jaxb:property name="typeAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='idbag-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='idbag-element']//xsd:element[@name='collection-id']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='index-element']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='join-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='joined-subclass-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='key-element']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='key-many-to-one-element']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='key-property-element']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='key-property-element']//xsd:attribute[@name='type']">
|
||||||
|
<jaxb:property name="typeAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='list-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='list-index-element']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='map-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='map-element']//xsd:element[@name='map-key']//xsd:attribute[@name='type']">
|
||||||
|
<jaxb:property name="typeAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='map-element']//xsd:element[@name='index-many-to-many']//xsd:attribute[@name='column']">
|
||||||
|
<jaxb:property name="columnAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='one-to-one-element']//xsd:attribute[@name='formula']">
|
||||||
|
<jaxb:property name="formulaAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='primitive-array-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='property-element']//xsd:attribute[@name='type']">
|
||||||
|
<jaxb:property name="typeAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='set-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
<jaxb:bindings node="//xsd:complexType[@name='union-subclass-element']//xsd:attribute[@name='subselect']">
|
||||||
|
<jaxb:property name="subselectAttribute"/>
|
||||||
|
</jaxb:bindings>
|
||||||
|
</jaxb:bindings>
|
||||||
|
|
||||||
|
</jaxb:bindings>
|
|
@ -1,19 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<jxb:bindings version="1.0"
|
|
||||||
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
|
|
||||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
||||||
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
|
|
||||||
jxb:extensionBindingPrefixes="xjc">
|
|
||||||
|
|
||||||
<jxb:bindings schemaLocation="../resources/org/hibernate/ejb/orm_2_0.xsd" node="/xs:schema">
|
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
|
||||||
<jxb:schemaBindings>
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
<jxb:nameXmlTransform>
|
jaxb:version="2.1">
|
||||||
<jxb:typeName prefix="XML"/>
|
|
||||||
<jxb:elementName prefix="XML"/>
|
|
||||||
<jxb:modelGroupName prefix="XML"/>
|
|
||||||
<jxb:anonymousTypeName prefix="XML"/>
|
|
||||||
</jxb:nameXmlTransform>
|
|
||||||
</jxb:schemaBindings>
|
|
||||||
</jxb:bindings>
|
|
||||||
|
|
||||||
</jxb:bindings>
|
<jaxb:bindings schemaLocation="../resources/org/hibernate/ejb/orm_2_0.xsd" node="/xsd:schema">
|
||||||
|
<jaxb:schemaBindings>
|
||||||
|
<jaxb:nameXmlTransform>
|
||||||
|
<jaxb:typeName prefix="XML"/>
|
||||||
|
<jaxb:elementName prefix="XML"/>
|
||||||
|
<jaxb:modelGroupName prefix="XML"/>
|
||||||
|
<jaxb:anonymousTypeName prefix="XML"/>
|
||||||
|
</jaxb:nameXmlTransform>
|
||||||
|
</jaxb:schemaBindings>
|
||||||
|
</jaxb:bindings>
|
||||||
|
|
||||||
|
</jaxb:bindings>
|
Loading…
Reference in New Issue