Search in sources :

Example 11 with Selectable

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;
}
Also used : Selectable(org.hibernate.mapping.Selectable) Column(org.hibernate.mapping.Column) AnnotationException(org.hibernate.AnnotationException) Property(org.hibernate.mapping.Property) SimpleValue(org.hibernate.mapping.SimpleValue)

Aggregations

Selectable (org.hibernate.mapping.Selectable)11 Column (org.hibernate.mapping.Column)8 Property (org.hibernate.mapping.Property)5 Iterator (java.util.Iterator)3 AnnotationException (org.hibernate.AnnotationException)3 Component (org.hibernate.mapping.Component)3 SimpleValue (org.hibernate.mapping.SimpleValue)3 Value (org.hibernate.mapping.Value)2 Random (java.util.Random)1 JoinColumn (javax.persistence.JoinColumn)1 MapKeyJoinColumn (javax.persistence.MapKeyJoinColumn)1 PrimaryKeyJoinColumn (javax.persistence.PrimaryKeyJoinColumn)1 AssertionFailure (org.hibernate.AssertionFailure)1 XProperty (org.hibernate.annotations.common.reflection.XProperty)1 EntityNaming (org.hibernate.boot.model.naming.EntityNaming)1 Identifier (org.hibernate.boot.model.naming.Identifier)1 ImplicitJoinColumnNameSource (org.hibernate.boot.model.naming.ImplicitJoinColumnNameSource)1 ImplicitNamingStrategy (org.hibernate.boot.model.naming.ImplicitNamingStrategy)1 ImplicitPrimaryKeyJoinColumnNameSource (org.hibernate.boot.model.naming.ImplicitPrimaryKeyJoinColumnNameSource)1 PhysicalNamingStrategy (org.hibernate.boot.model.naming.PhysicalNamingStrategy)1