org.hibernate.envers.configuration.internal.metadata.InheritanceType Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-envers Show documentation
Show all versions of hibernate-envers Show documentation
Hibernate's entity version (audit/history) support
/*
* 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 .
*/
package org.hibernate.envers.configuration.internal.metadata;
import org.hibernate.MappingException;
import org.hibernate.mapping.JoinedSubclass;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.SingleTableSubclass;
import org.hibernate.mapping.Subclass;
import org.hibernate.mapping.UnionSubclass;
/**
* @author Adam Warski (adam at warski dot org)
*/
public enum InheritanceType {
NONE,
JOINED,
SINGLE,
TABLE_PER_CLASS;
/**
* @param pc The class for which to get the inheritance type.
*
* @return The inheritance type of this class. NONE, if this class does not inherit from
* another persistent class.
*/
public static InheritanceType get(PersistentClass pc) {
final PersistentClass superclass = pc.getSuperclass();
if ( superclass == null ) {
return InheritanceType.NONE;
}
// We assume that every subclass is of the same type.
final Subclass subclass = (Subclass) superclass.getSubclassIterator().next();
if ( subclass instanceof SingleTableSubclass ) {
return InheritanceType.SINGLE;
}
else if ( subclass instanceof JoinedSubclass ) {
return InheritanceType.JOINED;
}
else if ( subclass instanceof UnionSubclass ) {
return InheritanceType.TABLE_PER_CLASS;
}
throw new MappingException( "Unknown subclass class: " + subclass.getClass() );
}
}