/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * Copyright (c) 2010, Red Hat Inc. or third-party contributors as
 * indicated by the @author tags or express copyright attribution
 * statements applied by the authors.  All third-party contributions are
 * distributed under license by Red Hat Inc.
 *
 * This copyrighted material is made available to anyone wishing to use, modify,
 * copy, or redistribute it subject to the terms and conditions of the GNU
 * Lesser General Public License, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution; if not, write to:
 * Free Software Foundation, Inc.
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301  USA
 */
package org.hibernate.mapping;
import java.util.Iterator;

import org.hibernate.FetchMode;
import org.hibernate.MappingException;
import org.hibernate.cfg.Mappings;
import org.hibernate.engine.spi.Mapping;
import org.hibernate.type.EntityType;
import org.hibernate.type.Type;

A mapping for a one-to-many association
Author:Gavin King
/** * A mapping for a one-to-many association * @author Gavin King */
public class OneToMany implements Value { private final Mappings mappings; private final Table referencingTable; private String referencedEntityName; private PersistentClass associatedClass; private boolean embedded; private boolean ignoreNotFound; private EntityType getEntityType() { return mappings.getTypeResolver().getTypeFactory().manyToOne( getReferencedEntityName(), true, null, false, false, isIgnoreNotFound(), false ); } public OneToMany(Mappings mappings, PersistentClass owner) throws MappingException { this.mappings = mappings; this.referencingTable = (owner==null) ? null : owner.getTable(); } public PersistentClass getAssociatedClass() { return associatedClass; }
Associated entity on the many side
/** * Associated entity on the many side */
public void setAssociatedClass(PersistentClass associatedClass) { this.associatedClass = associatedClass; } public void createForeignKey() { // no foreign key element of for a one-to-many } public Iterator<Selectable> getColumnIterator() { return associatedClass.getKey().getColumnIterator(); } public int getColumnSpan() { return associatedClass.getKey().getColumnSpan(); } public FetchMode getFetchMode() { return FetchMode.JOIN; }
Table of the owner entity (the "one" side)
/** * Table of the owner entity (the "one" side) */
public Table getTable() { return referencingTable; } public Type getType() { return getEntityType(); } public boolean isNullable() { return false; } public boolean isSimpleValue() { return false; } public boolean isAlternateUniqueKey() { return false; } public boolean hasFormula() { return false; } public boolean isValid(Mapping mapping) throws MappingException { if (referencedEntityName==null) { throw new MappingException("one to many association must specify the referenced entity"); } return true; } public String getReferencedEntityName() { return referencedEntityName; }
Associated entity on the "many" side
/** * Associated entity on the "many" side */
public void setReferencedEntityName(String referencedEntityName) { this.referencedEntityName = referencedEntityName==null ? null : referencedEntityName.intern(); } public void setTypeUsingReflection(String className, String propertyName) {} public Object accept(ValueVisitor visitor) { return visitor.accept(this); } public boolean[] getColumnInsertability() { //TODO: we could just return all false... throw new UnsupportedOperationException(); } public boolean[] getColumnUpdateability() { //TODO: we could just return all false... throw new UnsupportedOperationException(); }
Deprecated:To be removed in 5. Removed as part of removing the notion of DOM entity-mode. See Jira issue: HHH-7771
/** * @deprecated To be removed in 5. Removed as part of removing the notion of DOM entity-mode. * See Jira issue: <a href="https://hibernate.onjira.com/browse/HHH-7771">HHH-7771</a> */
@Deprecated public boolean isEmbedded() { return embedded; }
Deprecated:To be removed in 5. Removed as part of removing the notion of DOM entity-mode. See Jira issue: HHH-7771
/** * @deprecated To be removed in 5. Removed as part of removing the notion of DOM entity-mode. * See Jira issue: <a href="https://hibernate.onjira.com/browse/HHH-7771">HHH-7771</a> */
@Deprecated public void setEmbedded(boolean embedded) { this.embedded = embedded; } public boolean isIgnoreNotFound() { return ignoreNotFound; } public void setIgnoreNotFound(boolean ignoreNotFound) { this.ignoreNotFound = ignoreNotFound; } }