HHH-6240 - Add access to configuration options targetting metamodel building
This commit is contained in:
parent
65c2c831ca
commit
52b2930b47
|
@ -24,9 +24,28 @@
|
||||||
|
|
||||||
package org.hibernate.metamodel;
|
package org.hibernate.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.SharedCacheMode;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.cache.spi.access.AccessType;
|
||||||
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public interface Metadata {
|
public interface Metadata {
|
||||||
|
/**
|
||||||
|
* Exposes the options used to produce a {@link Metadata} instance.
|
||||||
|
*/
|
||||||
|
public static interface Options {
|
||||||
|
public SourceProcessingOrder getSourceProcessingOrder();
|
||||||
|
public NamingStrategy getNamingStrategy();
|
||||||
|
public SharedCacheMode getSharedCacheMode();
|
||||||
|
public AccessType getDefaultAccessType();
|
||||||
|
public boolean useNewIdentifierGenerators();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Options getOptions();
|
||||||
|
|
||||||
|
public SessionFactory buildSessionFactory();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ package org.hibernate.metamodel;
|
||||||
|
|
||||||
import javax.persistence.SharedCacheMode;
|
import javax.persistence.SharedCacheMode;
|
||||||
|
|
||||||
|
import org.hibernate.cache.spi.access.AccessType;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,5 +39,9 @@ public interface MetadataBuilder {
|
||||||
|
|
||||||
public MetadataBuilder with(SharedCacheMode cacheMode);
|
public MetadataBuilder with(SharedCacheMode cacheMode);
|
||||||
|
|
||||||
|
public MetadataBuilder with(AccessType accessType);
|
||||||
|
|
||||||
|
public MetadataBuilder withNewIdentifierGeneratorsEnabled(boolean enabled);
|
||||||
|
|
||||||
public Metadata buildMetadata();
|
public Metadata buildMetadata();
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ import org.hibernate.metamodel.source.annotations.entity.state.binding.Discrimin
|
||||||
import org.hibernate.metamodel.source.annotations.entity.state.relational.ColumnRelationalStateImpl;
|
import org.hibernate.metamodel.source.annotations.entity.state.relational.ColumnRelationalStateImpl;
|
||||||
import org.hibernate.metamodel.source.annotations.entity.state.relational.TupleRelationalStateImpl;
|
import org.hibernate.metamodel.source.annotations.entity.state.relational.TupleRelationalStateImpl;
|
||||||
import org.hibernate.metamodel.source.annotations.util.JandexHelper;
|
import org.hibernate.metamodel.source.annotations.util.JandexHelper;
|
||||||
import org.hibernate.metamodel.source.internal.MetadataImpl;
|
import org.hibernate.metamodel.source.spi.MetadataImplementor;
|
||||||
import org.hibernate.service.classloading.spi.ClassLoaderService;
|
import org.hibernate.service.classloading.spi.ClassLoaderService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,11 +62,11 @@ import org.hibernate.service.classloading.spi.ClassLoaderService;
|
||||||
*/
|
*/
|
||||||
public class EntityBinder {
|
public class EntityBinder {
|
||||||
private final ConfiguredClass configuredClass;
|
private final ConfiguredClass configuredClass;
|
||||||
private final MetadataImpl meta;
|
private final MetadataImplementor meta;
|
||||||
|
|
||||||
private Schema.Name schemaName;
|
private Schema.Name schemaName;
|
||||||
|
|
||||||
public EntityBinder(MetadataImpl metadata, ConfiguredClass configuredClass) {
|
public EntityBinder(MetadataImplementor metadata, ConfiguredClass configuredClass) {
|
||||||
this.configuredClass = configuredClass;
|
this.configuredClass = configuredClass;
|
||||||
this.meta = metadata;
|
this.meta = metadata;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ public class EntityBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
Caching caching = null;
|
Caching caching = null;
|
||||||
switch ( meta.getSharedCacheMode() ) {
|
switch ( meta.getOptions().getSharedCacheMode() ) {
|
||||||
case ALL: {
|
case ALL: {
|
||||||
caching = createCachingForCacheableAnnotation( entityBinding );
|
caching = createCachingForCacheableAnnotation( entityBinding );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -38,7 +38,7 @@ import org.hibernate.metamodel.relational.state.ColumnRelationalState;
|
||||||
import org.hibernate.metamodel.source.annotations.HibernateDotNames;
|
import org.hibernate.metamodel.source.annotations.HibernateDotNames;
|
||||||
import org.hibernate.metamodel.source.annotations.entity.ColumnValues;
|
import org.hibernate.metamodel.source.annotations.entity.ColumnValues;
|
||||||
import org.hibernate.metamodel.source.annotations.entity.MappedAttribute;
|
import org.hibernate.metamodel.source.annotations.entity.MappedAttribute;
|
||||||
import org.hibernate.metamodel.source.internal.MetadataImpl;
|
import org.hibernate.metamodel.source.spi.MetadataImplementor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
|
@ -61,9 +61,9 @@ public class ColumnRelationalStateImpl implements ColumnRelationalState {
|
||||||
private Set<String> uniqueKeys = new HashSet<String>();
|
private Set<String> uniqueKeys = new HashSet<String>();
|
||||||
|
|
||||||
|
|
||||||
public ColumnRelationalStateImpl(MappedAttribute attribute, MetadataImpl meta) {
|
public ColumnRelationalStateImpl(MappedAttribute attribute, MetadataImplementor meta) {
|
||||||
ColumnValues columnValues = attribute.getColumnValues();
|
ColumnValues columnValues = attribute.getColumnValues();
|
||||||
namingStrategy = meta.getNamingStrategy();
|
namingStrategy = meta.getOptions().getNamingStrategy();
|
||||||
columnName = columnValues.getName().isEmpty() ? attribute.getName() : columnValues.getName();
|
columnName = columnValues.getName().isEmpty() ? attribute.getName() : columnValues.getName();
|
||||||
unique = columnValues.isUnique();
|
unique = columnValues.isUnique();
|
||||||
nullable = columnValues.isNullable();
|
nullable = columnValues.isNullable();
|
||||||
|
|
|
@ -70,11 +70,11 @@ import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSqlQueryElement;
|
||||||
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSubclassElement;
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLSubclassElement;
|
||||||
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLTuplizerElement;
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLTuplizerElement;
|
||||||
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLUnionSubclassElement;
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLUnionSubclassElement;
|
||||||
import org.hibernate.metamodel.source.internal.MetadataImpl;
|
|
||||||
import org.hibernate.metamodel.binding.state.PluralAttributeBindingState;
|
import org.hibernate.metamodel.binding.state.PluralAttributeBindingState;
|
||||||
import org.hibernate.metamodel.binding.state.SimpleAttributeBindingState;
|
import org.hibernate.metamodel.binding.state.SimpleAttributeBindingState;
|
||||||
import org.hibernate.metamodel.relational.state.TupleRelationalState;
|
import org.hibernate.metamodel.relational.state.TupleRelationalState;
|
||||||
import org.hibernate.metamodel.relational.state.ValueRelationalState;
|
import org.hibernate.metamodel.relational.state.ValueRelationalState;
|
||||||
|
import org.hibernate.metamodel.source.spi.MetadataImplementor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO : javadoc
|
* TODO : javadoc
|
||||||
|
@ -106,7 +106,7 @@ abstract class AbstractEntityBinder {
|
||||||
return hibernateMappingBinder.getHibernateXmlBinder();
|
return hibernateMappingBinder.getHibernateXmlBinder();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MetadataImpl getMetadata() {
|
protected MetadataImplementor getMetadata() {
|
||||||
return hibernateMappingBinder.getHibernateXmlBinder().getMetadata();
|
return hibernateMappingBinder.getHibernateXmlBinder().getMetadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ abstract class AbstractEntityBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected NamingStrategy getNamingStrategy() {
|
protected NamingStrategy getNamingStrategy() {
|
||||||
return getMetadata().getNamingStrategy();
|
return getMetadata().getOptions().getNamingStrategy();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void basicEntityBinding(XMLHibernateMapping.XMLClass entityClazz,
|
protected void basicEntityBinding(XMLHibernateMapping.XMLClass entityClazz,
|
||||||
|
@ -243,12 +243,16 @@ abstract class AbstractEntityBinder {
|
||||||
if ( entityClazz.getTable() == null ) {
|
if ( entityClazz.getTable() == null ) {
|
||||||
logicalTableName = StringHelper.unqualify( entityName );
|
logicalTableName = StringHelper.unqualify( entityName );
|
||||||
physicalTableName = getHibernateXmlBinder().getMetadata()
|
physicalTableName = getHibernateXmlBinder().getMetadata()
|
||||||
|
.getOptions()
|
||||||
.getNamingStrategy()
|
.getNamingStrategy()
|
||||||
.classToTableName( entityName );
|
.classToTableName( entityName );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
logicalTableName = entityClazz.getTable();
|
logicalTableName = entityClazz.getTable();
|
||||||
physicalTableName = getHibernateXmlBinder().getMetadata().getNamingStrategy().tableName( logicalTableName );
|
physicalTableName = getHibernateXmlBinder().getMetadata()
|
||||||
|
.getOptions()
|
||||||
|
.getNamingStrategy()
|
||||||
|
.tableName( logicalTableName );
|
||||||
}
|
}
|
||||||
// todo : find out the purpose of these logical bindings
|
// todo : find out the purpose of these logical bindings
|
||||||
// mappings.addTableBinding( schema, catalog, logicalTableName, physicalTableName, denormalizedSuperTable );
|
// mappings.addTableBinding( schema, catalog, logicalTableName, physicalTableName, denormalizedSuperTable );
|
||||||
|
|
|
@ -133,7 +133,7 @@ public class HibernateMappingBinder implements MappingDefaults {
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamingStrategy getNamingStrategy() {
|
public NamingStrategy getNamingStrategy() {
|
||||||
return hibernateXmlBinder.getMetadata().getNamingStrategy();
|
return hibernateXmlBinder.getMetadata().getOptions().getNamingStrategy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPackageName() {
|
public String getPackageName() {
|
||||||
|
|
|
@ -40,8 +40,8 @@ import org.hibernate.internal.util.collections.JoinedIterator;
|
||||||
import org.hibernate.internal.util.xml.XmlDocument;
|
import org.hibernate.internal.util.xml.XmlDocument;
|
||||||
import org.hibernate.metamodel.domain.MetaAttribute;
|
import org.hibernate.metamodel.domain.MetaAttribute;
|
||||||
import org.hibernate.metamodel.source.internal.JaxbRoot;
|
import org.hibernate.metamodel.source.internal.JaxbRoot;
|
||||||
import org.hibernate.metamodel.source.internal.MetadataImpl;
|
|
||||||
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLHibernateMapping;
|
import org.hibernate.metamodel.source.hbm.xml.mapping.XMLHibernateMapping;
|
||||||
|
import org.hibernate.metamodel.source.spi.MetadataImplementor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binder for {@code hbm.xml} files
|
* Binder for {@code hbm.xml} files
|
||||||
|
@ -51,14 +51,14 @@ import org.hibernate.metamodel.source.hbm.xml.mapping.XMLHibernateMapping;
|
||||||
public class HibernateXmlBinder {
|
public class HibernateXmlBinder {
|
||||||
private static final Logger log = LoggerFactory.getLogger( HibernateXmlBinder.class );
|
private static final Logger log = LoggerFactory.getLogger( HibernateXmlBinder.class );
|
||||||
|
|
||||||
private final MetadataImpl metadata;
|
private final MetadataImplementor metadata;
|
||||||
private final Map<String, MetaAttribute> globalMetas;
|
private final Map<String, MetaAttribute> globalMetas;
|
||||||
|
|
||||||
public HibernateXmlBinder(MetadataImpl metadata) {
|
public HibernateXmlBinder(MetadataImplementor metadata) {
|
||||||
this( metadata, Collections.<String, MetaAttribute>emptyMap() );
|
this( metadata, Collections.<String, MetaAttribute>emptyMap() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public HibernateXmlBinder(MetadataImpl metadata, Map<String, MetaAttribute> globalMetas) {
|
public HibernateXmlBinder(MetadataImplementor metadata, Map<String, MetaAttribute> globalMetas) {
|
||||||
this.metadata = metadata;
|
this.metadata = metadata;
|
||||||
this.globalMetas = globalMetas;
|
this.globalMetas = globalMetas;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ public class HibernateXmlBinder {
|
||||||
mappingBinder.processHibernateMapping();
|
mappingBinder.processHibernateMapping();
|
||||||
}
|
}
|
||||||
|
|
||||||
MetadataImpl getMetadata() {
|
MetadataImplementor getMetadata() {
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,63 +25,121 @@ package org.hibernate.metamodel.source.internal;
|
||||||
|
|
||||||
import javax.persistence.SharedCacheMode;
|
import javax.persistence.SharedCacheMode;
|
||||||
|
|
||||||
|
import org.hibernate.cache.spi.access.AccessType;
|
||||||
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.EJB3NamingStrategy;
|
import org.hibernate.cfg.EJB3NamingStrategy;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.metamodel.Metadata;
|
import org.hibernate.metamodel.Metadata;
|
||||||
import org.hibernate.metamodel.MetadataBuilder;
|
import org.hibernate.metamodel.MetadataBuilder;
|
||||||
import org.hibernate.metamodel.MetadataSources;
|
import org.hibernate.metamodel.MetadataSources;
|
||||||
import org.hibernate.metamodel.SourceProcessingOrder;
|
import org.hibernate.metamodel.SourceProcessingOrder;
|
||||||
|
import org.hibernate.service.BasicServiceRegistry;
|
||||||
|
import org.hibernate.service.config.spi.ConfigurationService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class MetadataBuilderImpl implements MetadataBuilder {
|
public class MetadataBuilderImpl implements MetadataBuilder {
|
||||||
private final MetadataSources sources;
|
private final MetadataSources sources;
|
||||||
|
private final OptionsImpl options;
|
||||||
private NamingStrategy namingStrategy = EJB3NamingStrategy.INSTANCE;
|
|
||||||
private SourceProcessingOrder sourceProcessingOrder = SourceProcessingOrder.HBM_FIRST;
|
|
||||||
private SharedCacheMode sharedCacheMode = SharedCacheMode.ENABLE_SELECTIVE;
|
|
||||||
|
|
||||||
public MetadataBuilderImpl(MetadataSources sources) {
|
public MetadataBuilderImpl(MetadataSources sources) {
|
||||||
this.sources = sources;
|
this.sources = sources;
|
||||||
}
|
this.options = new OptionsImpl( sources.getServiceRegistry() );
|
||||||
|
|
||||||
public MetadataSources getSources() {
|
|
||||||
return sources;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NamingStrategy getNamingStrategy() {
|
|
||||||
return namingStrategy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SharedCacheMode getSharedCacheMode() {
|
|
||||||
return sharedCacheMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceProcessingOrder getSourceProcessingOrder() {
|
|
||||||
return sourceProcessingOrder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MetadataBuilder with(NamingStrategy namingStrategy) {
|
public MetadataBuilder with(NamingStrategy namingStrategy) {
|
||||||
this.namingStrategy = namingStrategy;
|
this.options.namingStrategy = namingStrategy;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MetadataBuilder with(SourceProcessingOrder sourceProcessingOrder) {
|
public MetadataBuilder with(SourceProcessingOrder sourceProcessingOrder) {
|
||||||
this.sourceProcessingOrder = sourceProcessingOrder;
|
this.options.sourceProcessingOrder = sourceProcessingOrder;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MetadataBuilder with(SharedCacheMode sharedCacheMode) {
|
public MetadataBuilder with(SharedCacheMode sharedCacheMode) {
|
||||||
this.sharedCacheMode = sharedCacheMode;
|
this.options.sharedCacheMode = sharedCacheMode;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MetadataBuilder with(AccessType accessType) {
|
||||||
|
this.options.defaultCacheAccessType = accessType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MetadataBuilder withNewIdentifierGeneratorsEnabled(boolean enabled) {
|
||||||
|
this.options.useNewIdentifierGenerators = enabled;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Metadata buildMetadata() {
|
public Metadata buildMetadata() {
|
||||||
return new MetadataImpl( this );
|
return new MetadataImpl( sources, options );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class OptionsImpl implements Metadata.Options {
|
||||||
|
private SourceProcessingOrder sourceProcessingOrder = SourceProcessingOrder.HBM_FIRST;
|
||||||
|
private NamingStrategy namingStrategy = EJB3NamingStrategy.INSTANCE;
|
||||||
|
private SharedCacheMode sharedCacheMode = SharedCacheMode.ENABLE_SELECTIVE;
|
||||||
|
private AccessType defaultCacheAccessType;
|
||||||
|
private boolean useNewIdentifierGenerators;
|
||||||
|
|
||||||
|
public OptionsImpl(BasicServiceRegistry serviceRegistry) {
|
||||||
|
ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class );
|
||||||
|
|
||||||
|
// cache access type
|
||||||
|
defaultCacheAccessType = configService.getSetting(
|
||||||
|
AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY,
|
||||||
|
new ConfigurationService.Converter<AccessType>() {
|
||||||
|
@Override
|
||||||
|
public AccessType convert(Object value) {
|
||||||
|
return AccessType.fromExternalName( value.toString() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
useNewIdentifierGenerators = configService.getSetting(
|
||||||
|
AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS,
|
||||||
|
new ConfigurationService.Converter<Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean convert(Object value) {
|
||||||
|
return Boolean.parseBoolean( value.toString() );
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceProcessingOrder getSourceProcessingOrder() {
|
||||||
|
return sourceProcessingOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NamingStrategy getNamingStrategy() {
|
||||||
|
return namingStrategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AccessType getDefaultAccessType() {
|
||||||
|
return defaultCacheAccessType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SharedCacheMode getSharedCacheMode() {
|
||||||
|
return sharedCacheMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean useNewIdentifierGenerators() {
|
||||||
|
return useNewIdentifierGenerators;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.persistence.SharedCacheMode;
|
|
||||||
|
|
||||||
import org.jboss.jandex.Index;
|
import org.jboss.jandex.Index;
|
||||||
import org.jboss.jandex.Indexer;
|
import org.jboss.jandex.Indexer;
|
||||||
|
@ -38,7 +37,7 @@ import org.jboss.logging.Logger;
|
||||||
|
|
||||||
import org.hibernate.DuplicateMappingException;
|
import org.hibernate.DuplicateMappingException;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.mapping.MetadataSource;
|
import org.hibernate.mapping.MetadataSource;
|
||||||
import org.hibernate.metamodel.Metadata;
|
import org.hibernate.metamodel.Metadata;
|
||||||
|
@ -70,8 +69,8 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable
|
||||||
);
|
);
|
||||||
|
|
||||||
private final BasicServiceRegistry serviceRegistry;
|
private final BasicServiceRegistry serviceRegistry;
|
||||||
private final NamingStrategy namingStrategy;
|
private final Options options;
|
||||||
private final SharedCacheMode sharedCacheMode;
|
|
||||||
private final Database database = new Database();
|
private final Database database = new Database();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,15 +82,12 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable
|
||||||
private Map<String, TypeDef> typeDefs = new HashMap<String, TypeDef>();
|
private Map<String, TypeDef> typeDefs = new HashMap<String, TypeDef>();
|
||||||
private Map<String, String> imports;
|
private Map<String, String> imports;
|
||||||
|
|
||||||
public MetadataImpl(MetadataBuilderImpl builder) {
|
public MetadataImpl(MetadataSources metadataSources, Options options) {
|
||||||
final MetadataSources metadataSources = builder.getSources();
|
|
||||||
|
|
||||||
this.serviceRegistry = metadataSources.getServiceRegistry();
|
this.serviceRegistry = metadataSources.getServiceRegistry();
|
||||||
this.namingStrategy = builder.getNamingStrategy();
|
this.options = options;
|
||||||
this.sharedCacheMode = builder.getSharedCacheMode();
|
|
||||||
|
|
||||||
final ArrayList<String> processedEntityNames = new ArrayList<String>();
|
final ArrayList<String> processedEntityNames = new ArrayList<String>();
|
||||||
if ( builder.getSourceProcessingOrder() == SourceProcessingOrder.HBM_FIRST ) {
|
if ( options.getSourceProcessingOrder() == SourceProcessingOrder.HBM_FIRST ) {
|
||||||
applyHibernateMappings( metadataSources, processedEntityNames );
|
applyHibernateMappings( metadataSources, processedEntityNames );
|
||||||
applyAnnotationMappings( metadataSources, processedEntityNames );
|
applyAnnotationMappings( metadataSources, processedEntityNames );
|
||||||
}
|
}
|
||||||
|
@ -158,22 +154,27 @@ public class MetadataImpl implements Metadata, MetadataImplementor, Serializable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Options getOptions() {
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SessionFactory buildSessionFactory() {
|
||||||
|
// todo : implement!!!!
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public BasicServiceRegistry getServiceRegistry() {
|
public BasicServiceRegistry getServiceRegistry() {
|
||||||
return serviceRegistry;
|
return serviceRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Database getDatabase() {
|
public Database getDatabase() {
|
||||||
return database;
|
return database;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamingStrategy getNamingStrategy() {
|
|
||||||
return namingStrategy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SharedCacheMode getSharedCacheMode() {
|
|
||||||
return sharedCacheMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityBinding getEntityBinding(String entityName) {
|
public EntityBinding getEntityBinding(String entityName) {
|
||||||
return entityBindingMap.get( entityName );
|
return entityBindingMap.get( entityName );
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,17 +23,29 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.metamodel.source.spi;
|
package org.hibernate.metamodel.source.spi;
|
||||||
|
|
||||||
|
import org.hibernate.mapping.MetadataSource;
|
||||||
|
import org.hibernate.metamodel.Metadata;
|
||||||
import org.hibernate.metamodel.binding.EntityBinding;
|
import org.hibernate.metamodel.binding.EntityBinding;
|
||||||
|
import org.hibernate.metamodel.binding.FetchProfile;
|
||||||
|
import org.hibernate.metamodel.binding.PluralAttributeBinding;
|
||||||
import org.hibernate.metamodel.relational.Database;
|
import org.hibernate.metamodel.relational.Database;
|
||||||
import org.hibernate.service.BasicServiceRegistry;
|
import org.hibernate.service.BasicServiceRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public interface MetadataImplementor {
|
public interface MetadataImplementor extends Metadata {
|
||||||
public BasicServiceRegistry getServiceRegistry();
|
public BasicServiceRegistry getServiceRegistry();
|
||||||
public Database getDatabase();
|
public Database getDatabase();
|
||||||
|
|
||||||
public Iterable<EntityBinding> getEntityBindings();
|
public Iterable<EntityBinding> getEntityBindings();
|
||||||
public EntityBinding getEntityBinding(String entityName);
|
public EntityBinding getEntityBinding(String entityName);
|
||||||
|
|
||||||
|
public void addImport(String entityName, String entityName1);
|
||||||
|
|
||||||
|
public void addEntity(EntityBinding entityBinding);
|
||||||
|
|
||||||
|
public void addCollection(PluralAttributeBinding collectionBinding);
|
||||||
|
|
||||||
|
public FetchProfile findOrCreateFetchProfile(String profileName, MetadataSource hbm);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,4 +43,19 @@ public class ConfigurationServiceImpl implements ConfigurationService {
|
||||||
public Map getSettings() {
|
public Map getSettings() {
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T getSetting(String name, Converter<T> converter) {
|
||||||
|
return getSetting( name, converter, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T getSetting(String name, Converter<T> converter, T defaultValue) {
|
||||||
|
final Object value = settings.get( name );
|
||||||
|
if ( value == null ) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return converter.convert( value );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,4 +34,11 @@ import org.hibernate.service.Service;
|
||||||
*/
|
*/
|
||||||
public interface ConfigurationService extends Service {
|
public interface ConfigurationService extends Service {
|
||||||
public Map getSettings();
|
public Map getSettings();
|
||||||
|
|
||||||
|
public <T> T getSetting(String name, Converter<T> converter);
|
||||||
|
public <T> T getSetting(String name, Converter<T> converter, T defaultValue);
|
||||||
|
|
||||||
|
public static interface Converter<T> {
|
||||||
|
public T convert(Object value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue