use of org.hibernate.mapping.Selectable in project hibernate-orm by hibernate.
the class CopyIdentifierComponentSecondPass method createSimpleProperty.
private Property createSimpleProperty(PersistentClass referencedPersistentClass, boolean isExplicitReference, Map<String, Ejb3JoinColumn> columnByReferencedName, AtomicInteger index, Property referencedProperty) {
Property property = new Property();
property.setName(referencedProperty.getName());
//FIXME set optional?
//property.setOptional( property.isOptional() );
property.setPersistentClass(component.getOwner());
property.setPropertyAccessorName(referencedProperty.getPropertyAccessorName());
SimpleValue value = new SimpleValue(buildingContext.getMetadataCollector(), component.getTable());
property.setValue(value);
final SimpleValue referencedValue = (SimpleValue) referencedProperty.getValue();
value.setTypeName(referencedValue.getTypeName());
value.setTypeParameters(referencedValue.getTypeParameters());
final Iterator<Selectable> columns = referencedValue.getColumnIterator();
if (joinColumns[0].isNameDeferred()) {
joinColumns[0].copyReferencedStructureAndCreateDefaultJoinColumns(referencedPersistentClass, columns, value);
} else {
//FIXME take care of Formula
while (columns.hasNext()) {
final Selectable selectable = columns.next();
if (!Column.class.isInstance(selectable)) {
log.debug("Encountered formula definition; skipping");
continue;
}
final Column column = (Column) selectable;
final Ejb3JoinColumn joinColumn;
String logicalColumnName = null;
if (isExplicitReference) {
final String columnName = column.getName();
logicalColumnName = buildingContext.getMetadataCollector().getLogicalColumnName(referencedPersistentClass.getTable(), columnName);
//JPA 2 requires referencedColumnNames to be case insensitive
joinColumn = columnByReferencedName.get(logicalColumnName.toLowerCase(Locale.ROOT));
} else {
joinColumn = columnByReferencedName.get("" + index.get());
index.getAndIncrement();
}
if (joinColumn == null && !joinColumns[0].isNameDeferred()) {
throw new AnnotationException(isExplicitReference ? "Unable to find column reference in the @MapsId mapping: " + logicalColumnName : "Implicit column reference in the @MapsId mapping fails, try to use explicit referenceColumnNames: " + referencedEntityName);
}
final String columnName = joinColumn == null || joinColumn.isNameDeferred() ? "tata_" + column.getName() : joinColumn.getName();
value.addColumn(new Column(columnName));
if (joinColumn != null) {
joinColumn.linkWithValue(value);
}
column.setValue(value);
}
}
return property;
}
Aggregations