in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java [2559:2620]
protected void bindSimpleId(PersistentProperty identifier, RootClass entity,
InFlightMetadataCollector mappings, Identity mappedId, String sessionFactoryBeanName) {
Mapping mapping = getMapping(identifier.getOwner());
boolean useSequence = mapping != null && mapping.isTablePerConcreteClass();
// create the id value
SimpleValue id = new SimpleValue(metadataBuildingContext, entity.getTable());
Property idProperty = new Property();
idProperty.setName(identifier.getName());
idProperty.setValue(id);
entity.setDeclaredIdentifierProperty(idProperty);
// set identifier on entity
Properties params = new Properties();
entity.setIdentifier(id);
if (mappedId == null) {
// configure generator strategy
id.setIdentifierGeneratorStrategy(useSequence ? "sequence-identity" : "native");
} else {
String generator = mappedId.getGenerator();
if("native".equals(generator) && useSequence) {
generator = "sequence-identity";
}
id.setIdentifierGeneratorStrategy(generator);
params.putAll(mappedId.getParams());
if(params.containsKey(SEQUENCE_KEY)) {
params.put(SequenceStyleGenerator.SEQUENCE_PARAM, params.getProperty(SEQUENCE_KEY));
}
if ("assigned".equals(generator)) {
id.setNullValue("undefined");
}
}
String schemaName = getSchemaName(mappings);
String catalogName = getCatalogName(mappings);
params.put(PersistentIdentifierGenerator.IDENTIFIER_NORMALIZER, this.metadataBuildingContext.getObjectNameNormalizer());
if (schemaName != null) {
params.setProperty(PersistentIdentifierGenerator.SCHEMA, schemaName);
}
if (catalogName != null) {
params.setProperty(PersistentIdentifierGenerator.CATALOG, catalogName);
}
id.setIdentifierGeneratorProperties(params);
// bind value
bindSimpleValue(identifier, null, id, EMPTY_PATH, mappings, sessionFactoryBeanName);
// create property
Property prop = new Property();
prop.setValue(id);
// bind property
bindProperty(identifier, prop, mappings);
// set identifier property
entity.setIdentifierProperty(prop);
id.getTable().setIdentifierValue(id);
}