in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/cfg/HibernateMappingContext.java [230:291]
public IdentityMapping createIdentityMapping(final ClassMapping classMapping) {
final Mapping mappedForm = createMappedForm(classMapping.getEntity());
final Object identity = mappedForm.getIdentity();
final ValueGenerator generator;
if(identity instanceof Identity) {
Identity id = (Identity) identity;
String generatorName = id.getGenerator();
if(generatorName != null) {
ValueGenerator resolvedGenerator;
try {
resolvedGenerator = ValueGenerator.valueOf(generatorName.toUpperCase(java.util.Locale.ENGLISH));
} catch (IllegalArgumentException e) {
if(ClassUtils.isPresent(generatorName)) {
resolvedGenerator = ValueGenerator.CUSTOM;
}
else {
throw new DatastoreConfigurationException("Invalid id generation strategy for entity ["+classMapping.getEntity().getName()+"]: " + generatorName);
}
}
generator = resolvedGenerator;
}
else {
generator = ValueGenerator.AUTO;
}
}
else {
generator = ValueGenerator.AUTO;
}
return new IdentityMapping() {
@Override
public String[] getIdentifierName() {
if(identity instanceof Identity) {
final String name = ((Identity) identity).getName();
if(name != null) {
return new String[]{name};
}
else {
return DEFAULT_IDENTITY_MAPPING;
}
}
else if(identity instanceof CompositeIdentity) {
return ((CompositeIdentity) identity).getPropertyNames();
}
return DEFAULT_IDENTITY_MAPPING;
}
@Override
public ValueGenerator getGenerator() {
return generator;
}
@Override
public ClassMapping getClassMapping() {
return classMapping;
}
@Override
public Property getMappedForm() {
return (Property) identity;
}
};
}