Package org.hibernate.persister.entity
Class SingleTableEntityPersister
- java.lang.Object
-
- org.hibernate.persister.entity.AbstractEntityPersister
-
- org.hibernate.persister.entity.SingleTableEntityPersister
-
- All Implemented Interfaces:
LazyPropertyInitializer,PostInsertIdentityPersister,ClassMetadata,EntityPersister,Joinable,Loadable,Lockable,OuterJoinLoadable,PropertyMapping,Queryable,SQLLoadable,UniqueKeyLoadable,AttributeSource,EntityDefinition
public class SingleTableEntityPersister extends AbstractEntityPersister
The default implementation of the EntityPersister interface. Implements the "table-per-class-hierarchy" or "roll-up" mapping strategy for an entity class and its inheritance hierarchy. This is implemented as a single table holding all classes in the hierarchy with a discriminator column used to determine which concrete class is referenced.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.hibernate.persister.entity.AbstractEntityPersister
AbstractEntityPersister.CacheEntryHelper, AbstractEntityPersister.InclusionChecker
-
Nested classes/interfaces inherited from interface org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer
LazyPropertyInitializer.InterceptorImplementor
-
Nested classes/interfaces inherited from interface org.hibernate.persister.entity.Queryable
Queryable.Declarer
-
-
Field Summary
-
Fields inherited from class org.hibernate.persister.entity.AbstractEntityPersister
batchSize, customSQLDelete, customSQLInsert, customSQLUpdate, deleteCallable, deleteResultCheckStyles, ENTITY_CLASS, insertCallable, insertResultCheckStyles, propertyMapping, rowIdName, updateCallable, updateResultCheckStyles, VERSION_COLUMN_ALIAS
-
Fields inherited from interface org.hibernate.persister.entity.EntityPersister
ENTITY_ID
-
Fields inherited from interface org.hibernate.bytecode.enhance.spi.LazyPropertyInitializer
UNFETCHED_PROPERTY
-
Fields inherited from interface org.hibernate.persister.entity.Loadable
ROWID_ALIAS
-
-
Constructor Summary
Constructors Constructor Description SingleTableEntityPersister(PersistentClass persistentClass, EntityDataAccess cacheAccessStrategy, NaturalIdDataAccess naturalIdRegionAccessStrategy, PersisterCreationContext creationContext)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddDiscriminatorToInsert(Insert insert)protected voidaddDiscriminatorToSelect(SelectFragment select, java.lang.String name, java.lang.String suffix)booleancanOmitSuperclassTableJoin()If true, persister can omit superclass tables during joining if they are not needed in the query.protected voiddoPostInstantiate()protected java.lang.StringfilterFragment(java.lang.String alias)protected java.lang.StringfilterFragment(java.lang.String alias, java.util.Set<java.lang.String> treatAsDeclarations)java.lang.StringfromTableFragment(java.lang.String name)Get the main from table fragment, given a query alias.java.lang.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 constraint violations.java.lang.String[][]getContraintOrderedTableKeyColumnClosure()For each table specified inQueryable.getConstraintOrderedTableNameClosure(), get the columns that define the key between the various hierarchy classes.java.lang.StringgetDiscriminatorAlias()java.lang.StringgetDiscriminatorColumnName()java.lang.StringgetDiscriminatorColumnReaders()java.lang.StringgetDiscriminatorColumnReaderTemplate()protected java.lang.StringgetDiscriminatorFormula()java.lang.StringgetDiscriminatorFormulaTemplate()java.lang.StringgetDiscriminatorSQLValue()Get the discriminator value for this particular concrete subclass, as a string that may be embedded in a select statementTypegetDiscriminatorType()Get the discriminator typejava.lang.ObjectgetDiscriminatorValue()Get the discriminator valueorg.hibernate.internal.FilterAliasGeneratorgetFilterAliasGenerator(java.lang.String rootAlias)java.lang.String[]getKeyColumns(int j)java.io.Serializable[]getPropertySpaces()Returns an array of objects that identify spaces in which properties of this entity are persisted, for instances of this class only.java.lang.StringgetPropertyTableName(java.lang.String propertyName)Get the table name for the given property pathprotected int[]getPropertyTableNumbers()protected int[]getPropertyTableNumbersInSelect()protected java.lang.StringgetSequentialSelect(java.lang.String entityName)java.lang.String[]getSubclassClosure()protected int[]getSubclassColumnTableNumberClosure()java.lang.StringgetSubclassForDiscriminatorValue(java.lang.Object value)Get the concrete subclass corresponding to the given discriminator valueprotected int[]getSubclassFormulaTableNumberClosure()java.lang.StringgetSubclassPropertyTableName(int i)Return the table name used to persist the numbered property of the class or a subclass.protected intgetSubclassPropertyTableNumber(int i)protected java.lang.String[]getSubclassTableKeyColumns(int j)java.lang.StringgetSubclassTableName(int j)Get the name of the table with the given index from the internal array.intgetSubclassTableSpan()java.lang.StringgetTableName()The table to join to.java.lang.StringgetTableName(int j)intgetTableSpan()booleanhasSequentialSelect()protected booleanisClassOrSuperclassJoin(int j)protected booleanisClassOrSuperclassTable(int j)protected booleanisDiscriminatorFormula()protected booleanisInverseSubclassTable(int j)booleanisInverseTable(int j)booleanisMultiTable()Is the inheritance hierarchy described by this persister contained across multiple tables?protected booleanisNullableSubclassTable(int j)booleanisNullableTable(int j)booleanisPropertyOfTable(int property, int j)protected booleanisSubclassPropertyDeferred(java.lang.String propertyName, java.lang.String entityName)protected booleanisSubclassTableLazy(int j)protected booleanisSubclassTableSequentialSelect(int j)booleanisTableCascadeDeleteEnabled(int j)java.lang.StringoneToManyFilterFragment(java.lang.String alias)java.lang.StringoneToManyFilterFragment(java.lang.String alias, java.util.Set<java.lang.String> treatAsDeclarations)-
Methods inherited from class org.hibernate.persister.entity.AbstractEntityPersister
afterInitialize, afterReassociate, buildCacheEntry, buildCacheEntryHelper, buildMergeCascadeEntityLoader, buildRefreshCascadeEntityLoader, canExtractIdOutOfEntity, canReadFromCache, canUseReferenceCacheEntries, canWriteToCache, check, checkVersion, concretePropertySelectFragment, concretePropertySelectFragment, concretePropertySelectFragmentSansLeadingComma, consumesCollectionAlias, consumesEntityAlias, countSubclassProperties, createDelete, createEntityLoader, createEntityLoader, createEntityLoader, createFrom, createInsert, createJoin, createJoin, createJoin, createLoaders, createNaturalIdLoaders, createProxy, createQueryLoader, createSelect, createUniqueKeyLoader, createUniqueKeyLoaders, createUpdate, createWhereByKey, dehydrate, dehydrate, delete, delete, determinePkByNaturalIdQuery, determineSubclassTableJoinType, determineSubclassTableJoinType, determineTableName, determineTableNumberForColumn, determineValueNullness, filterFragment, filterFragment, findDirty, findModified, forceVersionIncrement, fromJoinFragment, fromJoinFragment, fromJoinFragment, generateDeleteString, generateEntityDefinition, generateFilterConditionAlias, generateIdByUniqueKeySelectString, generateIdentityInsertString, generateInsertGeneratedValuesSelectString, generateInsertString, generateInsertString, generateInsertString, generateLazySelectStringsByFetchGroup, generateLocker, generateSelectVersionString, generateSnapshotSelectString, generateSQLDeleteStrings, generateTableAlias, generateUpdateGeneratedValuesSelectString, generateUpdateString, generateUpdateString, getAppropriateLoader, getAppropriateUniqueKeyLoader, getAttributes, getBytecodeEnhancementMetadata, getCacheAccessStrategy, getCacheEntryStructure, getCascadeStyle, getClassMetadata, getCollectionKey, getConcreteProxyClass, getCurrentVersion, getDatabaseSnapshot, getDeleteResultCheckStyles, getDiscriminatorAlias, getEntityEntryFactory, getEntityKeyDefinition, getEntityMetamodel, getEntityMode, getEntityName, getEntityPersister, getEntityTuplizer, getEntityType, getFactory, getFetchMode, getIdByUniqueKey, getIdentifier, getIdentifier, getIdentifierAliases, getIdentifierAliases, getIdentifierColumnNames, getIdentifierColumnReaders, getIdentifierColumnReaderTemplates, getIdentifierColumnSpan, getIdentifierGenerator, getIdentifierPropertyName, getIdentifierType, getIdentityDelegate, getIdentitySelectString, getInsertResultCheckStyles, getInstrumentationMetadata, getKeyColumnNames, getLazyPropertyColumnAliases, getLazyPropertyNames, getLazyPropertyNumbers, getLazyPropertyTypes, getLoaderByLockMode, getMappedClass, getMappedSuperclass, getName, getNaturalIdCacheAccessStrategy, getNaturalIdentifierProperties, getNaturalIdentifierSnapshot, getNavigableRole, getNonLazyPropertyUpdateability, getPolymorphicJoinColumns, getPropertiesToInsert, getPropertiesToUpdate, getPropertyAliases, getPropertyCascadeStyles, getPropertyCheckability, getPropertyColumnInsertable, getPropertyColumnNames, getPropertyColumnNames, getPropertyColumnSpan, getPropertyColumnUpdateable, getPropertyColumnWriters, getPropertyIndex, getPropertyInsertability, getPropertyInsertGenerationInclusions, getPropertyLaziness, getPropertyNames, getPropertyNullability, getPropertySelectable, getPropertySpan, getPropertySubclassNames, getPropertyType, getPropertyTypes, getPropertyUniqueness, getPropertyUpdateability, getPropertyUpdateability, getPropertyUpdateGenerationInclusions, getPropertyValue, getPropertyValue, getPropertyValues, getPropertyValuesToInsert, getPropertyVersionability, getQuerySpaces, getRootEntityName, getRootTableAlias, getRootTableIdentifierColumnNames, getRootTableKeyColumnNames, getRootTableName, getSelectByUniqueKeyString, getSQLDeleteStrings, getSQLIdentityInsertString, getSQLInsertStrings, getSQLLazySelectString, getSQLLazyUpdateByRowIdStrings, getSQLLazyUpdateStrings, getSQLSnapshotSelectString, getSQLUpdateByRowIdStrings, getSQLUpdateStrings, getSQLWhereString, getSubclassColumnAliasClosure, getSubclassColumnClosure, getSubclassColumnLazyiness, getSubclassColumnReaderTemplateClosure, getSubclassEntityPersister, getSubclassFormulaAliasClosure, getSubclassFormulaClosure, getSubclassFormulaLazyiness, getSubclassFormulaTemplateClosure, getSubclassPropertyColumnAliases, getSubclassPropertyColumnNameClosure, getSubclassPropertyColumnNames, getSubclassPropertyColumnNames, getSubclassPropertyColumnReaderClosure, getSubclassPropertyColumnReaderTemplateClosure, getSubclassPropertyDeclarer, getSubclassPropertyFormulaTemplateClosure, getSubclassPropertyName, getSubclassPropertyNameClosure, getSubclassPropertySubclassNameClosure, getSubclassPropertyTableNumber, getSubclassPropertyType, getSubclassPropertyTypeClosure, getTableAliasForColumn, getTableId, getTableNames, getTableUpdateNeeded, getTemplateFromString, getType, getTypeDiscriminatorMetadata, getUpdateResultCheckStyles, getUpdateStrings, getVersion, getVersionColumnName, getVersionComparator, getVersionedTableName, getVersionProperty, getVersionSelectString, getVersionType, hasCache, hasCascades, hasCollections, hasEmbeddedCompositeIdentifier, hasFormulaProperties, hasIdentifierProperty, hasInsertGeneratedProperties, hasLazyProperties, hasMutableProperties, hasNaturalIdCache, hasNaturalIdentifier, hasProxy, hasRowId, hasSubclasses, hasSubselectLoadableCollections, hasUninitializedLazyProperties, hasUpdateGeneratedProperties, hasWhere, hydrate, identifierSelectFragment, implementsLifecycle, initializeEnhancedEntityUsedAsProxy, initializeLazyPropertiesFromCache, initializeLazyPropertiesFromDatastore, initializeLazyProperty, initializeLazyProperty, initPropertyPaths, initSubclassPropertyAliasesMap, insert, insert, insert, insert, instantiate, isAbstract, isAllNull, isAllOrDirtyOptLocking, isBatchable, isBatchLoadable, isCacheInvalidationRequired, isCollection, isDefinedOnSubclass, isDeleteCallable, isExplicitPolymorphism, isIdentifierAssignedByInsert, isInherited, isInsertCallable, isInstance, isInstrumented, isLazyPropertiesCacheable, isModifiableEntity, isMutable, isNaturalIdNonNullable, isPolymorphic, isSelectBeforeUpdateRequired, isSubclassEntityName, isSubclassPropertyNullable, isSubclassTableIndicatedByTreatAsDeclarations, isTransient, isUpdateCallable, isValueGenerationRequired, isVersioned, isVersionPropertyGenerated, isVersionPropertyInsertable, load, load, load, loadByNaturalId, loadByUniqueKey, loadEntityIdByNaturalId, lock, lock, logStaticSQL, multiLoad, optimisticLockStyle, postConstruct, postInstantiate, preInsertInMemoryValueGeneration, processInsertGeneratedProperties, processUpdateGeneratedProperties, propertySelectFragment, propertySelectFragmentFragment, registerAffectingFetchProfile, renderSelect, resetIdentifier, resolveAttributeIndexes, resolveDirtyAttributeIndexes, selectFragment, selectFragment, setIdentifier, setPropertyValue, setPropertyValue, setPropertyValues, toColumns, toColumns, toColumns, toString, toType, update, update, updateOrInsert, useDynamicInsert, useDynamicUpdate, useGetGeneratedKeys, useInsertSelectIdentity, whereJoinFragment, whereJoinFragment
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.hibernate.metadata.ClassMetadata
getIdentifier, getPropertyValuesToInsert, instantiate, setIdentifier
-
Methods inherited from interface org.hibernate.persister.entity.EntityPersister
canIdentityInsertBeDelayed, load
-
-
-
-
Constructor Detail
-
SingleTableEntityPersister
public SingleTableEntityPersister(PersistentClass persistentClass, EntityDataAccess cacheAccessStrategy, NaturalIdDataAccess naturalIdRegionAccessStrategy, PersisterCreationContext creationContext) throws HibernateException
- Throws:
HibernateException
-
-
Method Detail
-
isInverseTable
public boolean isInverseTable(int j)
- Overrides:
isInverseTablein classAbstractEntityPersister
-
isInverseSubclassTable
protected boolean isInverseSubclassTable(int j)
- Overrides:
isInverseSubclassTablein classAbstractEntityPersister
-
getDiscriminatorColumnName
public java.lang.String getDiscriminatorColumnName()
- Specified by:
getDiscriminatorColumnNamein interfaceLoadable- Overrides:
getDiscriminatorColumnNamein classAbstractEntityPersister- Returns:
- the column name for the discriminator as specified in the mapping.
-
getDiscriminatorColumnReaders
public java.lang.String getDiscriminatorColumnReaders()
- Overrides:
getDiscriminatorColumnReadersin classAbstractEntityPersister
-
getDiscriminatorColumnReaderTemplate
public java.lang.String getDiscriminatorColumnReaderTemplate()
- Overrides:
getDiscriminatorColumnReaderTemplatein classAbstractEntityPersister
-
getDiscriminatorAlias
public java.lang.String getDiscriminatorAlias()
- Overrides:
getDiscriminatorAliasin classAbstractEntityPersister
-
getDiscriminatorFormulaTemplate
public java.lang.String getDiscriminatorFormulaTemplate()
- Overrides:
getDiscriminatorFormulaTemplatein classAbstractEntityPersister
-
getTableName
public java.lang.String getTableName()
Description copied from interface:JoinableThe table to join to.
-
getDiscriminatorType
public Type getDiscriminatorType()
Description copied from interface:LoadableGet the discriminator type
-
getDiscriminatorValue
public java.lang.Object getDiscriminatorValue()
Description copied from interface:LoadableGet the discriminator value
-
getDiscriminatorSQLValue
public java.lang.String getDiscriminatorSQLValue()
Description copied from interface:QueryableGet the discriminator value for this particular concrete subclass, as a string that may be embedded in a select statement
-
getSubclassClosure
public java.lang.String[] getSubclassClosure()
-
getSubclassForDiscriminatorValue
public java.lang.String getSubclassForDiscriminatorValue(java.lang.Object value)
Description copied from interface:LoadableGet the concrete subclass corresponding to the given discriminator value
-
getPropertySpaces
public java.io.Serializable[] getPropertySpaces()
Description copied from interface:EntityPersisterReturns 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).- Returns:
- The property spaces.
-
isDiscriminatorFormula
protected boolean isDiscriminatorFormula()
-
getDiscriminatorFormula
protected java.lang.String getDiscriminatorFormula()
-
getTableName
public java.lang.String getTableName(int j)
- Specified by:
getTableNamein classAbstractEntityPersister
-
getKeyColumns
public java.lang.String[] getKeyColumns(int j)
- Specified by:
getKeyColumnsin classAbstractEntityPersister
-
isTableCascadeDeleteEnabled
public boolean isTableCascadeDeleteEnabled(int j)
- Specified by:
isTableCascadeDeleteEnabledin classAbstractEntityPersister
-
isPropertyOfTable
public boolean isPropertyOfTable(int property, int j)- Specified by:
isPropertyOfTablein classAbstractEntityPersister
-
isSubclassTableSequentialSelect
protected boolean isSubclassTableSequentialSelect(int j)
- Overrides:
isSubclassTableSequentialSelectin classAbstractEntityPersister
-
fromTableFragment
public java.lang.String fromTableFragment(java.lang.String name)
Description copied from interface:OuterJoinLoadableGet the main from table fragment, given a query alias.
-
filterFragment
protected java.lang.String filterFragment(java.lang.String alias) throws MappingException- Specified by:
filterFragmentin classAbstractEntityPersister- Throws:
MappingException
-
oneToManyFilterFragment
public java.lang.String oneToManyFilterFragment(java.lang.String alias) throws MappingException- Specified by:
oneToManyFilterFragmentin interfaceJoinable- Overrides:
oneToManyFilterFragmentin classAbstractEntityPersister- Throws:
MappingException
-
oneToManyFilterFragment
public java.lang.String oneToManyFilterFragment(java.lang.String alias, java.util.Set<java.lang.String> treatAsDeclarations)- Specified by:
oneToManyFilterFragmentin interfaceJoinable- Overrides:
oneToManyFilterFragmentin classAbstractEntityPersister
-
filterFragment
protected java.lang.String filterFragment(java.lang.String alias, java.util.Set<java.lang.String> treatAsDeclarations)- Specified by:
filterFragmentin classAbstractEntityPersister
-
getSubclassPropertyTableName
public java.lang.String getSubclassPropertyTableName(int i)
Description copied from interface:OuterJoinLoadableReturn the table name used to persist the numbered property of the class or a subclass.
-
addDiscriminatorToSelect
protected void addDiscriminatorToSelect(SelectFragment select, java.lang.String name, java.lang.String suffix)
- Overrides:
addDiscriminatorToSelectin classAbstractEntityPersister
-
getPropertyTableNumbersInSelect
protected int[] getPropertyTableNumbersInSelect()
- Specified by:
getPropertyTableNumbersInSelectin classAbstractEntityPersister
-
getSubclassPropertyTableNumber
protected int getSubclassPropertyTableNumber(int i)
- Specified by:
getSubclassPropertyTableNumberin classAbstractEntityPersister
-
getTableSpan
public int getTableSpan()
- Specified by:
getTableSpanin classAbstractEntityPersister
-
addDiscriminatorToInsert
protected void addDiscriminatorToInsert(Insert insert)
- Overrides:
addDiscriminatorToInsertin classAbstractEntityPersister
-
getSubclassColumnTableNumberClosure
protected int[] getSubclassColumnTableNumberClosure()
- Specified by:
getSubclassColumnTableNumberClosurein classAbstractEntityPersister
-
getSubclassFormulaTableNumberClosure
protected int[] getSubclassFormulaTableNumberClosure()
- Specified by:
getSubclassFormulaTableNumberClosurein classAbstractEntityPersister
-
getPropertyTableNumbers
protected int[] getPropertyTableNumbers()
- Specified by:
getPropertyTableNumbersin classAbstractEntityPersister
-
isSubclassPropertyDeferred
protected boolean isSubclassPropertyDeferred(java.lang.String propertyName, java.lang.String entityName)- Overrides:
isSubclassPropertyDeferredin classAbstractEntityPersister
-
hasSequentialSelect
public boolean hasSequentialSelect()
- Overrides:
hasSequentialSelectin classAbstractEntityPersister
-
getSequentialSelect
protected java.lang.String getSequentialSelect(java.lang.String entityName)
- Overrides:
getSequentialSelectin classAbstractEntityPersister
-
getSubclassTableKeyColumns
protected java.lang.String[] getSubclassTableKeyColumns(int j)
- Specified by:
getSubclassTableKeyColumnsin classAbstractEntityPersister
-
getSubclassTableName
public java.lang.String getSubclassTableName(int j)
Description copied from interface:QueryableGet the name of the table with the given index from the internal array.- Specified by:
getSubclassTableNamein interfaceQueryable- Specified by:
getSubclassTableNamein classAbstractEntityPersister- Parameters:
j- The index into the internal array.
-
getSubclassTableSpan
public int getSubclassTableSpan()
- Specified by:
getSubclassTableSpanin classAbstractEntityPersister
-
isClassOrSuperclassTable
protected boolean isClassOrSuperclassTable(int j)
- Specified by:
isClassOrSuperclassTablein classAbstractEntityPersister
-
isClassOrSuperclassJoin
protected boolean isClassOrSuperclassJoin(int j)
- Overrides:
isClassOrSuperclassJoinin classAbstractEntityPersister
-
isSubclassTableLazy
protected boolean isSubclassTableLazy(int j)
- Overrides:
isSubclassTableLazyin classAbstractEntityPersister
-
isNullableTable
public boolean isNullableTable(int j)
- Overrides:
isNullableTablein classAbstractEntityPersister
-
isNullableSubclassTable
protected boolean isNullableSubclassTable(int j)
- Overrides:
isNullableSubclassTablein classAbstractEntityPersister
-
getPropertyTableName
public java.lang.String getPropertyTableName(java.lang.String propertyName)
Description copied from interface:OuterJoinLoadableGet the table name for the given property path
-
doPostInstantiate
protected void doPostInstantiate()
- Overrides:
doPostInstantiatein classAbstractEntityPersister
-
canOmitSuperclassTableJoin
public boolean canOmitSuperclassTableJoin()
Description copied from class:AbstractEntityPersisterIf true, persister can omit superclass tables during joining if they are not needed in the query.- Overrides:
canOmitSuperclassTableJoinin classAbstractEntityPersister- Returns:
- true if the persister can do it
-
isMultiTable
public boolean isMultiTable()
Description copied from interface:QueryableIs the inheritance hierarchy described by this persister contained across multiple tables?- Specified by:
isMultiTablein interfaceQueryable- Overrides:
isMultiTablein classAbstractEntityPersister- Returns:
- True if the inheritance hierarchy is spread across multiple tables; false otherwise.
-
getConstraintOrderedTableNameClosure
public java.lang.String[] getConstraintOrderedTableNameClosure()
Description copied from interface:QueryableGet the names of all tables used in the hierarchy (up and down) ordered such that deletes in the given order would not cause constraint violations.- Returns:
- The ordered array of table names.
-
getContraintOrderedTableKeyColumnClosure
public java.lang.String[][] getContraintOrderedTableKeyColumnClosure()
Description copied from interface:QueryableFor each table specified inQueryable.getConstraintOrderedTableNameClosure(), get the columns that define the key between the various hierarchy classes. The first dimension here corresponds to the table indexes returned inQueryable.getConstraintOrderedTableNameClosure(). The second dimension should have the same length across all the elements in the first dimension. If not, that would be a problem ;)
-
getFilterAliasGenerator
public org.hibernate.internal.FilterAliasGenerator getFilterAliasGenerator(java.lang.String rootAlias)
-
-