public IdentityMapping createIdentityMapping()

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;
                }
            };
        }