/* * 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.Iterator; import org.hibernate.MappingException; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.engine.spi.Mapping; import org.hibernate.internal.util.collections.JoinedIterator; /** * @author Gavin King */ public class SingleTableSubclass extends Subclass { public SingleTableSubclass(PersistentClass superclass, MetadataBuildingContext metadataBuildingContext) { super( superclass, metadataBuildingContext ); } @SuppressWarnings("unchecked") protected Iterator getNonDuplicatedPropertyIterator() { return new JoinedIterator( getSuperclass().getUnjoinedPropertyIterator(), getUnjoinedPropertyIterator() ); } protected Iterator getDiscriminatorColumnIterator() { if ( isDiscriminatorInsertable() && !getDiscriminator().hasFormula() ) { return getDiscriminator().getColumnIterator(); } else { return super.getDiscriminatorColumnIterator(); } } public Object accept(PersistentClassVisitor mv) { return mv.accept( this ); } public void validate(Mapping mapping) throws MappingException { if ( getDiscriminator() == null ) { throw new MappingException( "No discriminator found for " + getEntityName() + ". Discriminator is needed when 'single-table-per-hierarchy' " + "is used and a class has subclasses" ); } super.validate( mapping ); } }