in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java [2645:2693]
protected void bindProperty(PersistentProperty grailsProperty, Property prop, InFlightMetadataCollector mappings) {
// set the property name
prop.setName(grailsProperty.getName());
if (isBidirectionalManyToOneWithListMapping(grailsProperty, prop)) {
prop.setInsertable(false);
prop.setUpdateable(false);
} else {
prop.setInsertable(getInsertableness(grailsProperty));
prop.setUpdateable(getUpdateableness(grailsProperty));
}
AccessType accessType = AccessType.getAccessStrategy(
grailsProperty.getMapping().getMappedForm().getAccessType()
);
if(accessType == AccessType.FIELD) {
EntityReflector.PropertyReader reader = grailsProperty.getReader();
Method getter = reader != null ? reader.getter() : null;
if(getter != null && getter.getAnnotation(Traits.Implemented.class) != null) {
prop.setPropertyAccessorName(TraitPropertyAccessStrategy.class.getName());
}
else {
prop.setPropertyAccessorName( accessType.getType() );
}
}
else {
prop.setPropertyAccessorName( accessType.getType() );
}
prop.setOptional(grailsProperty.isNullable());
setCascadeBehaviour(grailsProperty, prop);
// lazy to true
final boolean isToOne = grailsProperty instanceof ToOne && !(grailsProperty instanceof Embedded);
PersistentEntity propertyOwner = grailsProperty.getOwner();
boolean isLazyable = isToOne ||
!(grailsProperty instanceof Association) && !grailsProperty.equals(propertyOwner.getIdentity());
if (isLazyable) {
final boolean isLazy = getLaziness(grailsProperty);
prop.setLazy(isLazy);
if (isLazy && isToOne && !(PersistentAttributeInterceptable.class.isAssignableFrom(propertyOwner.getJavaClass()))) {
// handleLazyProxy(propertyOwner, grailsProperty);
}
}
}