@Override protected void addColumnBinding(SimpleValue value) { if (StringHelper.isEmpty(mappedBy)) { // was the column explicitly quoted in the mapping/annotation // TODO: in metamodel, we need to better split global quoting and explicit quoting w/ respect // to logical names boolean isLogicalColumnQuoted = StringHelper.isQuoted(getLogicalColumnName()); final ObjectNameNormalizer nameNormalizer = getBuildingContext().getObjectNameNormalizer(); final String logicalColumnName = nameNormalizer.normalizeIdentifierQuotingAsString(getLogicalColumnName()); final String referencedColumn = nameNormalizer.normalizeIdentifierQuotingAsString(getReferencedColumn()); final String unquotedLogColName = StringHelper.unquote(logicalColumnName); final String unquotedRefColumn = StringHelper.unquote(referencedColumn); String logicalCollectionColumnName = StringHelper.isNotEmpty(unquotedLogColName) ? unquotedLogColName : getPropertyName() + '_' + unquotedRefColumn; logicalCollectionColumnName = getBuildingContext() .getMetadataCollector() .getDatabase() .getJdbcEnvironment() .getIdentifierHelper() .toIdentifier(logicalCollectionColumnName, isLogicalColumnQuoted) .render(); getBuildingContext() .getMetadataCollector() .addColumnNameBinding(value.getTable(), logicalCollectionColumnName, getMappingColumn()); } }
/** Build JoinColumn for a JOINED hierarchy */ public static Ejb3JoinColumn buildJoinColumn( PrimaryKeyJoinColumn pkJoinAnn, JoinColumn joinAnn, Value identifier, Map<String, Join> joins, PropertyHolder propertyHolder, MetadataBuildingContext context) { final ObjectNameNormalizer normalizer = context.getObjectNameNormalizer(); Column col = (Column) identifier.getColumnIterator().next(); String defaultName = context .getMetadataCollector() .getLogicalColumnName(identifier.getTable(), col.getQuotedName()); if (pkJoinAnn != null || joinAnn != null) { String colName; String columnDefinition; String referencedColumnName; if (pkJoinAnn != null) { colName = pkJoinAnn.name(); columnDefinition = pkJoinAnn.columnDefinition(); referencedColumnName = pkJoinAnn.referencedColumnName(); } else { colName = joinAnn.name(); columnDefinition = joinAnn.columnDefinition(); referencedColumnName = joinAnn.referencedColumnName(); } final String sqlType; if (columnDefinition.equals("")) { sqlType = null; } else { sqlType = normalizer.toDatabaseIdentifierText(columnDefinition); } final String name; if ("".equals(colName)) { name = normalizer.normalizeIdentifierQuotingAsString(defaultName); } else { name = context.getObjectNameNormalizer().normalizeIdentifierQuotingAsString(colName); } return new Ejb3JoinColumn( sqlType, name, false, false, true, true, referencedColumnName, null, joins, propertyHolder, null, null, false, context); } else { defaultName = context.getObjectNameNormalizer().normalizeIdentifierQuotingAsString(defaultName); return new Ejb3JoinColumn( null, defaultName, false, false, true, true, null, null, joins, propertyHolder, null, null, true, context); } }