in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java [2836:2915]
protected void bindSimpleValue(PersistentProperty grailsProp,
PersistentProperty parentProperty, SimpleValue simpleValue,
String path, PropertyConfig propertyConfig, String sessionFactoryBeanName) {
setTypeForPropertyConfig(grailsProp, simpleValue, propertyConfig);
final PropertyConfig mappedForm = (PropertyConfig) grailsProp.getMapping().getMappedForm();
if (mappedForm.isDerived() && !(grailsProp instanceof TenantId)) {
Formula formula = new Formula();
formula.setFormula(propertyConfig.getFormula());
simpleValue.addFormula(formula);
} else {
Table table = simpleValue.getTable();
boolean hasConfig = propertyConfig != null;
String generator = hasConfig ? propertyConfig.getGenerator() : null;
if(generator != null) {
simpleValue.setIdentifierGeneratorStrategy(generator);
Properties params = propertyConfig.getTypeParams();
if(params != null) {
Properties generatorProps = new Properties();
generatorProps.putAll(params);
if(generatorProps.containsKey(SEQUENCE_KEY)) {
generatorProps.put(SequenceStyleGenerator.SEQUENCE_PARAM, generatorProps.getProperty(SEQUENCE_KEY));
}
simpleValue.setIdentifierGeneratorProperties( generatorProps );
}
}
// Add the column definitions for this value/property. Note that
// not all custom mapped properties will have column definitions,
// in which case we still need to create a Hibernate column for
// this value.
List<?> columnDefinitions = hasConfig ? propertyConfig.getColumns()
: Arrays.asList(new Object[] { null });
if (columnDefinitions.isEmpty()) {
columnDefinitions = Arrays.asList(new Object[] { null });
}
for (Object columnDefinition : columnDefinitions) {
ColumnConfig cc = (ColumnConfig) columnDefinition;
Column column = new Column();
// Check for explicitly mapped column name and SQL type.
if (cc != null) {
if (cc.getName() != null) {
column.setName(cc.getName());
}
if (cc.getSqlType() != null) {
column.setSqlType(cc.getSqlType());
}
}
column.setValue(simpleValue);
if (cc != null) {
if (cc.getLength() != -1) {
column.setLength(cc.getLength());
}
if (cc.getPrecision() != -1) {
column.setPrecision(cc.getPrecision());
}
if (cc.getScale() != -1) {
column.setScale(cc.getScale());
}
if(!mappedForm.isUniqueWithinGroup()) {
column.setUnique(cc.isUnique());
}
}
bindColumn(grailsProp, parentProperty, column, cc, path, table, sessionFactoryBeanName);
if (table != null) {
table.addColumn(column);
}
simpleValue.addColumn(column);
}
}
}