Java tutorial
/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.mapping; import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import org.hibernate.MappingException; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.type.EntityType; import org.hibernate.type.Type; /** * A many-to-one association mapping * @author Gavin King */ public class ManyToOne extends ToOne { private boolean ignoreNotFound; private boolean isLogicalOneToOne; /** * @deprecated Use {@link ManyToOne#ManyToOne(MetadataBuildingContext, Table)} instead. */ @Deprecated public ManyToOne(MetadataImplementor metadata, Table table) { super(metadata, table); } public ManyToOne(MetadataBuildingContext buildingContext, Table table) { super(buildingContext, table); } public Type getType() throws MappingException { return getMetadata().getTypeResolver().getTypeFactory().manyToOne(getReferencedEntityName(), referenceToPrimaryKey, getReferencedPropertyName(), getPropertyName(), isLazy(), isUnwrapProxy(), isIgnoreNotFound(), isLogicalOneToOne); } public void createForeignKey() throws MappingException { // the case of a foreign key to something other than the pk is handled in createPropertyRefConstraints if (referencedPropertyName == null && !hasFormula()) { createForeignKeyOfEntity(((EntityType) getType()).getAssociatedEntityName()); } } public void createPropertyRefConstraints(Map persistentClasses) { if (referencedPropertyName != null) { PersistentClass pc = (PersistentClass) persistentClasses.get(getReferencedEntityName()); Property property = pc.getReferencedProperty(getReferencedPropertyName()); if (property == null) { throw new MappingException("Could not find property " + getReferencedPropertyName() + " on " + getReferencedEntityName()); } else { // todo : if "none" another option is to create the ForeignKey object still but to set its #disableCreation flag if (!hasFormula() && !"none".equals(getForeignKeyName())) { java.util.List refColumns = new ArrayList(); Iterator iter = property.getColumnIterator(); while (iter.hasNext()) { Column col = (Column) iter.next(); refColumns.add(col); } ForeignKey fk = getTable().createForeignKey(getForeignKeyName(), getConstraintColumns(), ((EntityType) getType()).getAssociatedEntityName(), getForeignKeyDefinition(), refColumns); fk.setCascadeDeleteEnabled(isCascadeDeleteEnabled()); } } } } public Object accept(ValueVisitor visitor) { return visitor.accept(this); } public boolean isIgnoreNotFound() { return ignoreNotFound; } public void setIgnoreNotFound(boolean ignoreNotFound) { this.ignoreNotFound = ignoreNotFound; } public void markAsLogicalOneToOne() { this.isLogicalOneToOne = true; } public boolean isLogicalOneToOne() { return isLogicalOneToOne; } }