org.hibernate.persister.entity

Class UnionSubclassEntityPersister

Implemented Interfaces:
ClassMetadata, EntityPersister, Joinable, LazyPropertyInitializer, Loadable, Lockable, OptimisticCacheSource, OuterJoinLoadable, PostInsertIdentityPersister, PropertyMapping, Queryable, SQLLoadable, UniqueKeyLoadable

public class UnionSubclassEntityPersister
extends AbstractEntityPersister

Implementation of the "table-per-concrete-class" or "roll-down" mapping strategy for an entity and its inheritence hierarchy.
Author:
Gavin King

Nested Class Summary

Nested classes/interfaces inherited from class org.hibernate.persister.entity.AbstractEntityPersister

AbstractEntityPersister.InclusionChecker

Field Summary

Fields inherited from class org.hibernate.persister.entity.AbstractEntityPersister

ENTITY_CLASS, customSQLDelete, customSQLInsert, customSQLUpdate, deleteCallable, deleteResultCheckStyles, insertCallable, insertResultCheckStyles, propertyMapping, rowIdName, updateCallable, updateResultCheckStyles

Fields inherited from interface org.hibernate.persister.entity.EntityPersister

ENTITY_ID

Fields inherited from interface org.hibernate.intercept.LazyPropertyInitializer

UNFETCHED_PROPERTY

Fields inherited from interface org.hibernate.persister.entity.Loadable

ROWID_ALIAS

Constructor Summary

UnionSubclassEntityPersister(PersistentClass persistentClass, EntityRegionAccessStrategy cacheAccessStrategy, SessionFactoryImplementor factory, Mapping mapping)

Method Summary

protected void
addDiscriminatorToSelect(SelectFragment select, String name, String suffix)
String
filterFragment(String name)
String
fromTableFragment(String name)
protected String
generateSelectString(LockMode lockMode)
Generate the SQL that selects a row by id
protected String
generateSubquery(PersistentClass model, Mapping mapping)
String[]
getConstraintOrderedTableNameClosure()
Get the names of all tables used in the hierarchy (up and down) ordered such that deletes in the given order would not cause contraint violations.
String[][]
getContraintOrderedTableKeyColumnClosure()
For each table specified in Queryable.getConstraintOrderedTableNameClosure(), get the columns that define the key between the various hierarchy classes.
protected String
getDiscriminatorFormula()
String
getDiscriminatorSQLValue()
Get the discriminator value for this particular concrete subclass, as a string that may be embedded in a select statement
Type
getDiscriminatorType()
protected String[]
getKeyColumns(int j)
Serializable[]
getPropertySpaces()
Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class only.
String
getPropertyTableName(String propertyName)
protected int[]
getPropertyTableNumbers()
protected int[]
getPropertyTableNumbersInSelect()
Serializable[]
getQuerySpaces()
Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class and its subclasses.
String[]
getSubclassClosure()
protected int[]
getSubclassColumnTableNumberClosure()
String
getSubclassForDiscriminatorValue(Object value)
protected int[]
getSubclassFormulaTableNumberClosure()
String
getSubclassPropertyTableName(int i)
int
getSubclassPropertyTableNumber(String propertyName)
Given a property name, determine the number of the table which contains the column to which this property is mapped.
protected int
getSubclassPropertyTableNumber(int i)
protected String[]
getSubclassTableKeyColumns(int j)
String
getSubclassTableName(int j)
Get the name of the table with the given index from the internal array.
int
getSubclassTableSpan()
protected boolean[]
getTableHasColumns()
String
getTableName()
The table to join to.
protected String
getTableName(int j)
int
getTableSpan()
protected boolean
isClassOrSuperclassTable(int j)
protected boolean
isDiscriminatorFormula()
boolean
isMultiTable()
Is the inheritence hierarchy described by this persister contained across multiple tables?
protected boolean
isPropertyOfTable(int property, int j)
protected boolean
isTableCascadeDeleteEnabled(int j)

Methods inherited from class org.hibernate.persister.entity.AbstractEntityPersister

addDiscriminatorToInsert, addDiscriminatorToSelect, afterInitialize, afterReassociate, canExtractIdOutOfEntity, check, concretePropertySelectFragment, concretePropertySelectFragment, concretePropertySelectFragment, concretePropertySelectFragmentSansLeadingComma, consumesCollectionAlias, consumesEntityAlias, countSubclassProperties, createEntityLoader, createEntityLoader, createFrom, createJoin, createJoin, createProxy, createQueryLoader, createSelect, createUniqueKeyLoaders, createWhereByKey, dehydrate, dehydrate, delete, delete, filterFragment, filterFragment, findDirty, findModified, forceVersionIncrement, fromJoinFragment, generateDeleteString, generateFilterConditionAlias, generateIdentityInsertString, generateInsertGeneratedValuesSelectString, generateInsertString, generateInsertString, generateInsertString, generateLazySelectString, generateLocker, generateSelectVersionString, generateSnapshotSelectString, generateTableAlias, generateUpdateGeneratedValuesSelectString, generateUpdateString, generateUpdateString, getCacheAccessStrategy, getCacheEntryStructure, getCascadeStyle, getClassMetadata, getConcreteProxyClass, getCurrentVersion, getDatabaseSnapshot, getDiscriminatorAlias, getDiscriminatorAlias, getDiscriminatorColumnName, getDiscriminatorFormulaTemplate, getEntityMetamodel, getEntityName, getEntityType, getFactory, getFetchMode, getIdentifier, getIdentifierAliases, getIdentifierAliases, getIdentifierColumnNames, getIdentifierColumnSpan, getIdentifierGenerator, getIdentifierPropertyName, getIdentifierType, getIdentitySelectString, getKeyColumnNames, getKeyColumns, getLazyProperties, getMappedClass, getMappedSuperclass, getName, getNaturalIdentifierProperties, getNaturalIdentifierSnapshot, getNonLazyPropertyUpdateability, getPropertiesToInsert, getPropertiesToUpdate, getPropertyAliases, getPropertyCascadeStyles, getPropertyCheckability, getPropertyColumnNames, getPropertyColumnNames, getPropertyColumnSpan, getPropertyIndex, getPropertyInsertGenerationInclusions, getPropertyInsertability, getPropertyLaziness, getPropertyNames, getPropertyNullability, getPropertySpan, getPropertySubclassNames, getPropertyTableNumbers, getPropertyTableNumbersInSelect, getPropertyType, getPropertyTypes, getPropertyUpdateGenerationInclusions, getPropertyUpdateability, getPropertyUpdateability, getPropertyValue, getPropertyValue, getPropertyValues, getPropertyValuesToInsert, getPropertyVersionability, getQuerySpaces, getRootEntityName, getRootTableAlias, getRootTableIdentifierColumnNames, getRootTableKeyColumnNames, getRootTableName, getSQLDeleteStrings, getSQLIdentityInsertString, getSQLInsertStrings, getSQLLazySelectString, getSQLLazyUpdateByRowIdStrings, getSQLLazyUpdateStrings, getSQLSnapshotSelectString, getSQLUpdateByRowIdStrings, getSQLUpdateStrings, getSQLWhereString, getSelectByUniqueKeyString, getSequentialSelect, getSubclassColumnAliasClosure, getSubclassColumnClosure, getSubclassColumnLazyiness, getSubclassColumnTableNumberClosure, getSubclassEntityPersister, getSubclassFormulaAliasClosure, getSubclassFormulaClosure, getSubclassFormulaLazyiness, getSubclassFormulaTableNumberClosure, getSubclassFormulaTemplateClosure, getSubclassPropertyColumnAliases, getSubclassPropertyColumnNameClosure, getSubclassPropertyColumnNames, getSubclassPropertyColumnNames, getSubclassPropertyDeclarer, getSubclassPropertyFormulaTemplateClosure, getSubclassPropertyName, getSubclassPropertyNameClosure, getSubclassPropertySubclassNameClosure, getSubclassPropertyTableNumber, getSubclassPropertyTableNumber, getSubclassPropertyType, getSubclassPropertyTypeClosure, getSubclassTableKeyColumns, getSubclassTableName, getSubclassTableSpan, getTableName, getTableSpan, getTableUpdateNeeded, getTemporaryIdTableDDL, getTemporaryIdTableName, getTuplizer, getTuplizer, getType, getVersion, getVersionColumnName, getVersionComparator, getVersionProperty, getVersionSelectString, getVersionType, getVersionedTableName, guessEntityMode, hasCache, hasCascades, hasCollections, hasEmbeddedCompositeIdentifier, hasFormulaProperties, hasIdentifierProperty, hasInsertGeneratedProperties, hasLazyProperties, hasMutableProperties, hasNaturalIdentifier, hasProxy, hasRowId, hasSequentialSelect, hasSubclasses, hasSubselectLoadableCollections, hasUninitializedLazyProperties, hasUpdateGeneratedProperties, hasWhere, hydrate, identifierSelectFragment, implementsLifecycle, implementsValidatable, initLockers, initPropertyPaths, initSubclassPropertyAliasesMap, initializeLazyProperty, insert, insert, insert, insert, instantiate, isAbstract, isBatchLoadable, isBatchable, isCacheInvalidationRequired, isClassOrSuperclassTable, isCollection, isDefinedOnSubclass, isDeleteCallable, isExplicitPolymorphism, isIdentifierAssignedByInsert, isInherited, isInsertCallable, isInstance, isInstrumented, isInverseSubclassTable, isInverseTable, isLazyPropertiesCacheable, isMultiTable, isMutable, isNullableSubclassTable, isNullableTable, isPolymorphic, isPropertyOfTable, isSelectBeforeUpdateRequired, isSubclassEntityName, isSubclassPropertyDeferred, isSubclassPropertyNullable, isSubclassTableLazy, isSubclassTableSequentialSelect, isTableCascadeDeleteEnabled, isTransient, isUpdateCallable, isVersionPropertyGenerated, isVersionPropertyInsertable, isVersioned, load, loadByUniqueKey, lock, logStaticSQL, oneToManyFilterFragment, optimisticLockMode, postConstruct, postInstantiate, processInsertGeneratedProperties, processUpdateGeneratedProperties, propertySelectFragment, renderSelect, resetIdentifier, selectFragment, selectFragment, setIdentifier, setPropertyValue, setPropertyValue, setPropertyValues, toColumns, toColumns, toColumns, toString, toType, update, update, updateOrInsert, useDynamicInsert, useDynamicUpdate, useGetGeneratedKeys, useInsertSelectIdentity, whereJoinFragment

Constructor Details

UnionSubclassEntityPersister

public UnionSubclassEntityPersister(PersistentClass persistentClass,
                                    EntityRegionAccessStrategy cacheAccessStrategy,
                                    SessionFactoryImplementor factory,
                                    Mapping mapping)
            throws HibernateException

Method Details

addDiscriminatorToSelect

protected void addDiscriminatorToSelect(SelectFragment select,
                                        String name,
                                        String suffix)
Overrides:
addDiscriminatorToSelect in interface AbstractEntityPersister

filterFragment

public String filterFragment(String name)
Overrides:
filterFragment in interface AbstractEntityPersister

fromTableFragment

public String fromTableFragment(String name)
Specified by:
fromTableFragment in interface OuterJoinLoadable

generateSelectString

protected String generateSelectString(LockMode lockMode)
Generate the SQL that selects a row by id

generateSubquery

protected String generateSubquery(PersistentClass model,
                                  Mapping mapping)

getConstraintOrderedTableNameClosure

public String[] getConstraintOrderedTableNameClosure()
Get the names of all tables used in the hierarchy (up and down) ordered such that deletes in the given order would not cause contraint violations.
Specified by:
getConstraintOrderedTableNameClosure in interface Queryable
Returns:
The ordered array of table names.

getContraintOrderedTableKeyColumnClosure

public String[][] getContraintOrderedTableKeyColumnClosure()
For each table specified in Queryable.getConstraintOrderedTableNameClosure(), get the columns that define the key between the various hierarchy classes.

The first dimension here corresponds to the table indexes returned in Queryable.getConstraintOrderedTableNameClosure().

The second dimension should have the same length across all the elements in the first dimension. If not, that'd be a problem ;)

Specified by:
getContraintOrderedTableKeyColumnClosure in interface Queryable
Returns:

getDiscriminatorFormula

protected String getDiscriminatorFormula()

getDiscriminatorSQLValue

public String getDiscriminatorSQLValue()
Get the discriminator value for this particular concrete subclass, as a string that may be embedded in a select statement
Specified by:
getDiscriminatorSQLValue in interface Queryable

getDiscriminatorType

public Type getDiscriminatorType()
Specified by:
getDiscriminatorType in interface Loadable

getKeyColumns

protected String[] getKeyColumns(int j)
Overrides:
getKeyColumns in interface AbstractEntityPersister

getPropertySpaces

public Serializable[] getPropertySpaces()
Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class only.

For most implementations, this returns the complete set of table names to which instances of the mapped entity are persisted (not accounting for superclass entity mappings).

Specified by:
getPropertySpaces in interface EntityPersister
Returns:
The property spaces.

getPropertyTableName

public String getPropertyTableName(String propertyName)
Specified by:
getPropertyTableName in interface OuterJoinLoadable

getPropertyTableNumbers

protected int[] getPropertyTableNumbers()
Overrides:
getPropertyTableNumbers in interface AbstractEntityPersister

getPropertyTableNumbersInSelect

protected int[] getPropertyTableNumbersInSelect()
Overrides:
getPropertyTableNumbersInSelect in interface AbstractEntityPersister

getQuerySpaces

public Serializable[] getQuerySpaces()
Specified by:
getQuerySpaces in interface EntityPersister
Overrides:
getQuerySpaces in interface AbstractEntityPersister
Returns:
The query spaces.

getSubclassClosure

public String[] getSubclassClosure()

getSubclassColumnTableNumberClosure

protected int[] getSubclassColumnTableNumberClosure()
Overrides:
getSubclassColumnTableNumberClosure in interface AbstractEntityPersister

getSubclassForDiscriminatorValue

public String getSubclassForDiscriminatorValue(Object value)
Specified by:
getSubclassForDiscriminatorValue in interface Loadable

getSubclassFormulaTableNumberClosure

protected int[] getSubclassFormulaTableNumberClosure()
Overrides:
getSubclassFormulaTableNumberClosure in interface AbstractEntityPersister

getSubclassPropertyTableName

public String getSubclassPropertyTableName(int i)
Specified by:
getSubclassPropertyTableName in interface OuterJoinLoadable

getSubclassPropertyTableNumber

public int getSubclassPropertyTableNumber(String propertyName)
Specified by:
getSubclassPropertyTableNumber in interface Queryable
Overrides:
getSubclassPropertyTableNumber in interface AbstractEntityPersister
Parameters:
Returns:
The nunber of the table to which the property is mapped.

getSubclassPropertyTableNumber

protected int getSubclassPropertyTableNumber(int i)
Overrides:
getSubclassPropertyTableNumber in interface AbstractEntityPersister

getSubclassTableKeyColumns

protected String[] getSubclassTableKeyColumns(int j)
Overrides:
getSubclassTableKeyColumns in interface AbstractEntityPersister

getSubclassTableName

public String getSubclassTableName(int j)
Get the name of the table with the given index from the internal array.
Specified by:
getSubclassTableName in interface Queryable
Overrides:
getSubclassTableName in interface AbstractEntityPersister
Parameters:
Returns:

getSubclassTableSpan

public int getSubclassTableSpan()
Overrides:
getSubclassTableSpan in interface AbstractEntityPersister

getTableHasColumns

protected boolean[] getTableHasColumns()

getTableName

public String getTableName()
The table to join to.
Specified by:
getTableName in interface Joinable

getTableName

protected String getTableName(int j)
Overrides:
getTableName in interface AbstractEntityPersister

getTableSpan

public int getTableSpan()
Overrides:
getTableSpan in interface AbstractEntityPersister

isClassOrSuperclassTable

protected boolean isClassOrSuperclassTable(int j)
Overrides:
isClassOrSuperclassTable in interface AbstractEntityPersister

isDiscriminatorFormula

protected boolean isDiscriminatorFormula()

isMultiTable

public boolean isMultiTable()
Is the inheritence hierarchy described by this persister contained across multiple tables?
Specified by:
isMultiTable in interface Queryable
Overrides:
isMultiTable in interface AbstractEntityPersister
Returns:
True if the inheritence hierarchy is spread across multiple tables; false otherwise.

isPropertyOfTable

protected boolean isPropertyOfTable(int property,
                                    int j)
Overrides:
isPropertyOfTable in interface AbstractEntityPersister

isTableCascadeDeleteEnabled

protected boolean isTableCascadeDeleteEnabled(int j)
Overrides:
isTableCascadeDeleteEnabled in interface AbstractEntityPersister