This commit is contained in:
Strong Liu 2011-05-31 17:39:11 +08:00
parent ec0e823b64
commit 32a320d078
5 changed files with 29 additions and 27 deletions

View File

@ -97,26 +97,6 @@ public class DefaultIdentifierGeneratorFactory implements IdentifierGeneratorFac
} }
} }
public static String generatorType(GenerationType generatorEnum, boolean useNewGeneratorMappings) {
switch ( generatorEnum ) {
case IDENTITY:
return "identity";
case AUTO:
return useNewGeneratorMappings
? "enhanced-sequence"
: "native";
case TABLE:
return useNewGeneratorMappings
? "enhanced-table"
: MultipleHiLoPerTableGenerator.class.getName();
case SEQUENCE:
return useNewGeneratorMappings
? "enhanced-sequence"
: "seqhilo";
}
throw new AssertionFailure( "Unknown GeneratorType: " + generatorEnum );
}
@Override @Override
public void setDialect(Dialect dialect) { public void setDialect(Dialect dialect) {

View File

@ -40,7 +40,6 @@ import org.hibernate.annotations.OptimisticLockType;
import org.hibernate.annotations.PolymorphismType; import org.hibernate.annotations.PolymorphismType;
import org.hibernate.cache.spi.RegionFactory; import org.hibernate.cache.spi.RegionFactory;
import org.hibernate.cache.spi.access.AccessType; import org.hibernate.cache.spi.access.AccessType;
import org.hibernate.id.factory.DefaultIdentifierGeneratorFactory;
import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.StringHelper;
import org.hibernate.metamodel.binding.Caching; import org.hibernate.metamodel.binding.Caching;
import org.hibernate.metamodel.binding.EntityBinding; import org.hibernate.metamodel.binding.EntityBinding;
@ -63,6 +62,7 @@ import org.hibernate.metamodel.source.annotations.entity.state.binding.ManyToOne
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.ManyToOneRelationalStateImpl; import org.hibernate.metamodel.source.annotations.entity.state.relational.ManyToOneRelationalStateImpl;
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.global.IdGeneratorBinder;
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.internal.MetadataImpl;
import org.hibernate.metamodel.source.spi.MetadataImplementor; import org.hibernate.metamodel.source.spi.MetadataImplementor;
@ -374,7 +374,7 @@ public class EntityBinder {
String generator = JandexHelper.getValueAsString( generatedValueAnn, "generator" ); String generator = JandexHelper.getValueAsString( generatedValueAnn, "generator" );
IdGenerator idGenerator = null; IdGenerator idGenerator = null;
if ( StringHelper.isNotEmpty( generator ) ) { if ( StringHelper.isNotEmpty( generator ) ) {
idGenerator = ( (MetadataImpl) meta ).getIdGenerator( generator ); idGenerator = meta.getIdGenerator( generator );
if ( idGenerator == null ) { if ( idGenerator == null ) {
throw new MappingException( throw new MappingException(
String.format( String.format(
@ -392,7 +392,7 @@ public class EntityBinder {
"strategy", "strategy",
GenerationType.class GenerationType.class
); );
String strategy = DefaultIdentifierGeneratorFactory.generatorType( String strategy = IdGeneratorBinder.generatorType(
generationType, generationType,
meta.getOptions().useNewIdentifierGenerators() meta.getOptions().useNewIdentifierGenerators()
); );

View File

@ -32,6 +32,7 @@ import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.Index; import org.jboss.jandex.Index;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import org.hibernate.AssertionFailure;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.GenericGenerators; import org.hibernate.annotations.GenericGenerators;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
@ -41,7 +42,6 @@ import org.hibernate.id.SequenceHiLoGenerator;
import org.hibernate.id.TableHiLoGenerator; import org.hibernate.id.TableHiLoGenerator;
import org.hibernate.id.enhanced.SequenceStyleGenerator; import org.hibernate.id.enhanced.SequenceStyleGenerator;
import org.hibernate.id.enhanced.TableGenerator; import org.hibernate.id.enhanced.TableGenerator;
import org.hibernate.id.factory.DefaultIdentifierGeneratorFactory;
import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.StringHelper;
import org.hibernate.metamodel.binding.IdGenerator; import org.hibernate.metamodel.binding.IdGenerator;
@ -116,7 +116,7 @@ public class IdGeneratorBinder {
Map<String, String> prms = new HashMap<String, String>(); Map<String, String> prms = new HashMap<String, String>();
addStringParameter( generator, "sequenceName", prms, SequenceStyleGenerator.SEQUENCE_PARAM ); addStringParameter( generator, "sequenceName", prms, SequenceStyleGenerator.SEQUENCE_PARAM );
boolean useNewIdentifierGenerators = metadata.getOptions().useNewIdentifierGenerators(); boolean useNewIdentifierGenerators = metadata.getOptions().useNewIdentifierGenerators();
strategy = DefaultIdentifierGeneratorFactory.generatorType( GenerationType.SEQUENCE, useNewIdentifierGenerators); strategy = generatorType( GenerationType.SEQUENCE, useNewIdentifierGenerators );
if ( useNewIdentifierGenerators ) { if ( useNewIdentifierGenerators ) {
addStringParameter( generator, "catalog", prms, PersistentIdentifierGenerator.CATALOG ); addStringParameter( generator, "catalog", prms, PersistentIdentifierGenerator.CATALOG );
addStringParameter( generator, "schema", prms, PersistentIdentifierGenerator.SCHEMA ); addStringParameter( generator, "schema", prms, PersistentIdentifierGenerator.SCHEMA );
@ -150,7 +150,7 @@ public class IdGeneratorBinder {
addStringParameter( generator, "catalog", prms, PersistentIdentifierGenerator.CATALOG ); addStringParameter( generator, "catalog", prms, PersistentIdentifierGenerator.CATALOG );
addStringParameter( generator, "schema", prms, PersistentIdentifierGenerator.SCHEMA ); addStringParameter( generator, "schema", prms, PersistentIdentifierGenerator.SCHEMA );
boolean useNewIdentifierGenerators = metadata.getOptions().useNewIdentifierGenerators(); boolean useNewIdentifierGenerators = metadata.getOptions().useNewIdentifierGenerators();
strategy = DefaultIdentifierGeneratorFactory.generatorType( GenerationType.TABLE, useNewIdentifierGenerators); strategy = generatorType( GenerationType.TABLE, useNewIdentifierGenerators );
if ( useNewIdentifierGenerators ) { if ( useNewIdentifierGenerators ) {
prms.put( TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, "true" ); prms.put( TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, "true" );
addStringParameter( generator, "table", prms, TableGenerator.TABLE_PARAM ); addStringParameter( generator, "table", prms, TableGenerator.TABLE_PARAM );
@ -185,4 +185,24 @@ public class IdGeneratorBinder {
private IdGeneratorBinder() { private IdGeneratorBinder() {
} }
public static String generatorType(GenerationType generatorEnum, boolean useNewGeneratorMappings) {
switch ( generatorEnum ) {
case IDENTITY:
return "identity";
case AUTO:
return useNewGeneratorMappings
? "enhanced-sequence"
: "native";
case TABLE:
return useNewGeneratorMappings
? "enhanced-table"
: MultipleHiLoPerTableGenerator.class.getName();
case SEQUENCE:
return useNewGeneratorMappings
? "enhanced-sequence"
: "seqhilo";
}
throw new AssertionFailure( "Unknown GeneratorType: " + generatorEnum );
}
} }

View File

@ -128,7 +128,7 @@ public class MetadataImpl implements MetadataImplementor, Serializable {
public void addIdGenerator(IdGenerator generator) { public void addIdGenerator(IdGenerator generator) {
idGenerators.put( generator.getName(), generator ); idGenerators.put( generator.getName(), generator );
} }
@Override
public IdGenerator getIdGenerator(String name) { public IdGenerator getIdGenerator(String name) {
if ( name == null ) { if ( name == null ) {
throw new IllegalArgumentException( "null is not a valid generator name" ); throw new IllegalArgumentException( "null is not a valid generator name" );

View File

@ -27,6 +27,7 @@ import org.hibernate.engine.spi.FilterDefinition;
import org.hibernate.metamodel.Metadata; 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.FetchProfile;
import org.hibernate.metamodel.binding.IdGenerator;
import org.hibernate.metamodel.binding.PluralAttributeBinding; import org.hibernate.metamodel.binding.PluralAttributeBinding;
import org.hibernate.metamodel.binding.TypeDef; import org.hibernate.metamodel.binding.TypeDef;
import org.hibernate.metamodel.relational.Database; import org.hibernate.metamodel.relational.Database;
@ -62,4 +63,5 @@ public interface MetadataImplementor extends Metadata {
public void addFilterDefinition(FilterDefinition filterDefinition); public void addFilterDefinition(FilterDefinition filterDefinition);
public Iterable<FilterDefinition> getFilterDefinitions(); public Iterable<FilterDefinition> getFilterDefinitions();
public IdGenerator getIdGenerator(String name);
} }