(PersistentClass) persistentClasses.get( ownerEntity ), otherSideProperty, otherSideJoin ); ManyToOne manyToOne = new ManyToOne( buildingContext, mappedByJoin.getTable() ); manyToOne.setIgnoreNotFound( ignoreNotFound ); manyToOne.setCascadeDeleteEnabled( value.isCascadeDeleteEnabled() ); manyToOne.setFetchMode( value.getFetchMode() ); manyToOne.setLazy( value.isLazy() ); manyToOne.setReferencedEntityName( value.getReferencedEntityName() ); manyToOne.setUnwrapProxy( value.isUnwrapProxy() ); prop.setValue( manyToOne ); Iterator otherSideJoinKeyColumns = otherSideJoin.getKey().getColumnIterator(); copy.setComment( column.getComment() ); copy.setDefaultValue( column.getDefaultValue() ); manyToOne.addColumn( copy ); ( (ManyToOne) otherSideProperty.getValue() ).setReferenceToPrimaryKey( false );
if ( value instanceof ManyToOne ) { ManyToOne sourceManyToOne = (ManyToOne) sourceValue; ManyToOne targetManyToOne = new ManyToOne( getBuildingContext(), collection.getCollectionTable() ); targetManyToOne.setFetchMode( FetchMode.DEFAULT ); targetManyToOne.setLazy( true ); targetManyToOne.setReferencedEntityName( sourceManyToOne.getReferencedEntityName() ); targetValue = targetManyToOne;
public Type getType() throws MappingException { return getMetadata().getTypeResolver().getTypeFactory().manyToOne( getReferencedEntityName(), referenceToPrimaryKey, getReferencedPropertyName(), getPropertyName(), isLazy(), isUnwrapProxy(), isIgnoreNotFound(), isLogicalOneToOne ); }
@Override public void doSecondPass(Map persistentClasses) throws org.hibernate.MappingException { if ( referencedEntityAttributeName == null ) { manyToOneBinding.createForeignKey(); } else { manyToOneBinding.createPropertyRefConstraints( mappingDocument.getMetadataCollector().getEntityBindingMap() ); } }
public void createPropertyRefConstraints(Map persistentClasses) { if (referencedPropertyName!=null) { PersistentClass pc = (PersistentClass) persistentClasses.get(getReferencedEntityName() ); Property property = pc.getReferencedProperty( getReferencedPropertyName() ); getReferencedPropertyName() + " on " + getReferencedEntityName() ); if ( !hasFormula() && !"none".equals( getForeignKeyName() ) ) { java.util.List refColumns = new ArrayList(); Iterator iter = property.getColumnIterator(); ForeignKey fk = getTable().createForeignKey( getForeignKeyName(), getConstraintColumns(), ( (EntityType) getType() ).getAssociatedEntityName(), getForeignKeyDefinition(), refColumns ); fk.setCascadeDeleteEnabled(isCascadeDeleteEnabled() );
org.hibernate.mapping.Map mapValue = (org.hibernate.mapping.Map) this.collection; if ( isIndexOfEntities ) { element = new ManyToOne( buildingContext, mapValue.getCollectionTable() ); mapValue.setIndex( element ); element.setReferencedEntityName( mapKeyType ); element.setFetchMode( FetchMode.JOIN ); element.setLazy( false ); if ( foreignKey != null ) { if ( foreignKey.value() == ConstraintMode.NO_CONSTRAINT ) { element.setForeignKeyName( "none" ); element.setForeignKeyName( StringHelper.nullIfEmpty( foreignKey.name() ) ); element.setForeignKeyDefinition( StringHelper.nullIfEmpty( foreignKey.foreignKeyDefinition() ) );
MetadataBuildingContext context) { org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( context, columns[0].getTable() ); value.markAsLogicalOneToOne(); value.setReferencedEntityName( ToOneBinder.getReferenceEntityName( inferredData, targetEntity, context ) ); final XProperty property = inferredData.getProperty(); defineFetchingStrategy( value, property ); value.setIgnoreNotFound( ignoreNotFound ); value.setCascadeDeleteEnabled( cascadeOnDelete ); value.setTypeName( inferredData.getClassOrElementName() ); final String propertyName = inferredData.getPropertyName(); value.setTypeUsingReflection( propertyHolder.getClassName(), propertyName );
manyToOneBinding.setReferencedEntityName( referencedEntityName ); if ( StringHelper.isNotEmpty( manyToOneSource.getReferencedEntityAttributeName() ) ) { manyToOneBinding.setReferencedPropertyName( manyToOneSource.getReferencedEntityAttributeName() ); manyToOneBinding.setReferenceToPrimaryKey( false ); manyToOneBinding.setReferenceToPrimaryKey( true ); manyToOneBinding.setLazy( manyToOneSource.getFetchCharacteristics().getFetchTiming() == FetchTiming.DELAYED ); manyToOneBinding.setUnwrapProxy( manyToOneSource.getFetchCharacteristics().isUnwrapProxies() ); manyToOneBinding.setFetchMode( manyToOneSource.getFetchCharacteristics().getFetchStyle() == FetchStyle.SELECT ? FetchMode.SELECT manyToOneBinding.setIgnoreNotFound( manyToOneSource.isIgnoreNotFound() ); manyToOneBinding.setForeignKeyName( manyToOneSource.getExplicitForeignKeyName() ); manyToOneBinding.setCascadeDeleteEnabled( manyToOneSource.isCascadeDeleteEnabled() );
final PluralAttributeElementSourceManyToMany elementSource = (PluralAttributeElementSourceManyToMany) getPluralAttributeSource().getElementSource(); final ManyToOne elementBinding = new ManyToOne( getMappingDocument(), getCollectionBinding().getCollectionTable() elementBinding.setLazy( elementSource.getFetchCharacteristics() .getFetchTiming() != FetchTiming.IMMEDIATE ); elementBinding.setFetchMode( elementSource.getFetchCharacteristics().getFetchStyle() == FetchStyle.SELECT ? FetchMode.SELECT elementBinding.setForeignKeyName( elementSource.getExplicitForeignKeyName() ); elementBinding.setReferencedEntityName( elementSource.getReferencedEntityName() ); if ( StringHelper.isNotEmpty( elementSource.getReferencedEntityAttributeName() ) ) { elementBinding.setReferencedPropertyName( elementSource.getReferencedEntityAttributeName() ); elementBinding.setReferenceToPrimaryKey( false ); elementBinding.setReferenceToPrimaryKey( true ); || elementSource.getWhere() != null ) { if ( getCollectionBinding().getFetchMode() == FetchMode.JOIN && elementBinding.getFetchMode() != FetchMode.JOIN ) { throw new MappingException( String.format(
ManyToOne m2o = new ManyToOne(mappings, tab); m2o.setLazy(LAZY); final HashMap<String, PersistentClass> persistentClasses = new HashMap<String, PersistentClass>(); persistentClasses.put(oneMDQualifiedTableName, config.getClassMapping(oneMDQualifiedTableName)); m2o.setReferencedEntityName(oneMDQualifiedTableName); m2o.setForeignKeyName(relationship.getQualifiedName()); return null; m2o.addColumn(col); boolean referenceToPrimaryKey = pkColumns.containsAll(referencedColumns) && pkColumns.size() == referencedColumns.size(); m2o.setReferenceToPrimaryKey(referenceToPrimaryKey); if(!referenceToPrimaryKey) { logger.debug("Foreign key {} is not a reference to the primary key. Creating synthetic property.", m2o.createForeignKey(); m2o.createPropertyRefConstraints(persistentClasses);
public Type getType() throws MappingException { return TypeFactory.manyToOne( getReferencedEntityName(), getReferencedPropertyName(), isLazy(), isUnwrapProxy(), isEmbedded(), isIgnoreNotFound() ); }
public static void bindManyToOne(Element node, ManyToOne manyToOne, String path, boolean isNullable, Mappings mappings) throws MappingException { bindColumnsOrFormula( node, manyToOne, path, isNullable, mappings ); initOuterJoinFetchSetting( node, manyToOne ); initLaziness( node, manyToOne, mappings, true ); Attribute ukName = node.attribute( "property-ref" ); if ( ukName != null ) { manyToOne.setReferencedPropertyName( ukName.getValue() ); } manyToOne.setReferencedEntityName( getEntityName( node, mappings ) ); String embed = node.attributeValue( "embed-xml" ); manyToOne.setEmbedded( embed == null || "true".equals( embed ) ); String notFound = node.attributeValue( "not-found" ); manyToOne.setIgnoreNotFound( "ignore".equals( notFound ) ); if( ukName != null && !manyToOne.isIgnoreNotFound() ) { if ( !node.getName().equals("many-to-many") ) { //TODO: really bad, evil hack to fix!!! mappings.addSecondPass( new ManyToOneSecondPass(manyToOne) ); } } Attribute fkNode = node.attribute( "foreign-key" ); if ( fkNode != null ) manyToOne.setForeignKeyName( fkNode.getValue() ); String cascade = node.attributeValue( "cascade" ); if ( cascade != null && cascade.indexOf( "delete-orphan" ) >= 0 ) { if ( !manyToOne.isLogicalOneToOne() ) { throw new MappingException( "many-to-one attribute [" + path + "] does not support orphan delete as it is not unique" ); } } }
/** * @param mutable * @param table * @param fk * @param columnsToBind * @param processedColumns * @param rc * @param propName */ private Property bindManyToOne(String propertyName, boolean mutable, Table table, ForeignKey fk, Set<Column> processedColumns) { ManyToOne value = new ManyToOne((MetadataImplementor)metadata, table); value.setReferencedEntityName( fk.getReferencedEntityName() ); Iterator<Column> columns = fk.getColumnIterator(); while ( columns.hasNext() ) { Column fkcolumn = (Column) columns.next(); checkColumn(fkcolumn); value.addColumn(fkcolumn); processedColumns.add(fkcolumn); } value.setFetchMode(FetchMode.SELECT); return makeEntityProperty(propertyName, mutable, table, fk, value, false); }
/** */ private static void bindManyToOneValues(GrailsDomainClassProperty property, ManyToOne manyToOne) { PropertyConfig config = getPropertyConfig(property); if (config != null && config.getFetch() != null) { manyToOne.setFetchMode(config.getFetch()); } else { manyToOne.setFetchMode(FetchMode.DEFAULT); } manyToOne.setLazy(getLaziness(property)); if (config != null) { manyToOne.setIgnoreNotFound(config.getIgnoreNotFound()); } // set referenced entity manyToOne.setReferencedEntityName(property.getReferencedPropertyType().getName()); }
MetadataBuildingContext context) { org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( context, columns[0].getMappedTable() ); value.markAsLogicalOneToOne(); value.setReferencedEntityName( ToOneBinder.getReferenceEntityName( inferredData, targetEntity, context ) ); final XProperty property = inferredData.getProperty(); defineFetchingStrategy( value, property ); value.setIgnoreNotFound( ignoreNotFound ); value.setCascadeDeleteEnabled( cascadeOnDelete ); value.setExplicitTypeName( inferredData.getClassOrElementName() ); final String propertyName = inferredData.getPropertyName(); value.setTypeUsingReflection( propertyHolder.getClassName(), propertyName );
ManyToOne element = new ManyToOne(mdbc, collection.getCollectionTable() ); element.setReferencedEntityName( tableToClassName ); guessAndAlignType(fk.getTable(), fkcolumn, mapping, false); // needed to ensure foreign key columns has same type as the "property" column. element.addColumn(fkcolumn);
sourceDocument, (SingularAttributeSourceManyToOne) attributeSource, new ManyToOne( sourceDocument, component.getTable() ), component.getComponentClassName() );
public void doSecondPass(java.util.Map persistentClasses) throws MappingException { if ( value instanceof ManyToOne ) { ManyToOne manyToOne = (ManyToOne) value; PersistentClass ref = (PersistentClass) persistentClasses.get( manyToOne.getReferencedEntityName() ); if ( ref == null ) { throw new AnnotationException( "@OneToOne or @ManyToOne on " + StringHelper.qualify( entityClassName, path ) + " references an unknown entity: " + manyToOne.getReferencedEntityName() ); } BinderHelper.createSyntheticPropertyReference( columns, ref, null, manyToOne, false, mappings ); TableBinder.bindFk( ref, null, columns, manyToOne, unique, mappings ); /* * HbmBinder does this only when property-ref != null, but IMO, it makes sense event if it is null */ if ( !manyToOne.isIgnoreNotFound() ) manyToOne.createPropertyRefConstraints( persistentClasses ); } else if ( value instanceof OneToOne ) { ( (OneToOne) value ).createForeignKey(); } else { throw new AssertionFailure( "FkSecondPass for a wrong value type: " + value.getClass().getName() ); } } }
/** * @param property * @param manyToOne */ private static void bindUnidirectionalOneToManyInverseValues(GrailsDomainClassProperty property, ManyToOne manyToOne) { PropertyConfig config = getPropertyConfig(property); if (config != null) { manyToOne.setLazy(config.getLazy()); manyToOne.setIgnoreNotFound(config.getIgnoreNotFound()); } else { manyToOne.setLazy(true); } // set referenced entity manyToOne.setReferencedEntityName(property.getReferencedPropertyType().getName()); }
.getEntityBinding( getReferencedEntityName() ); final Property property = pc.getReferencedProperty( getReferencedPropertyName() ); Locale.ROOT, "Could not find property `%s` on `%s : cannot create foreign-key (selectable mappings)", getReferencedPropertyName(), getReferencedEntityName() ForeignKey fk = (ForeignKey) getMappedTable().createForeignKey( getForeignKeyName(), getConstraintColumns(), getReferencedEntityName(), getForeignKeyDefinition(), property.getMappedColumns() ); fk.setCascadeDeleteEnabled( isCascadeDeleteEnabled() ); if ( !hasFormula() && !"none".equals( getForeignKeyName() ) ) { fk.disableCreation();