Package org.hibernate.sql.ast.tree.from
Class LazyTableGroup
java.lang.Object
org.hibernate.sql.ast.tree.from.DelegatingTableGroup
org.hibernate.sql.ast.tree.from.LazyTableGroup
- All Implemented Interfaces:
DomainResultProducer,SqmPathInterpretation,SqlSelectionProducer,Expression,ColumnReferenceQualifier,TableGroup,SqlAstNode
The purpose of this table group is to defer creating the actual table group until it is really needed.
If it is not needed, we can safely skip rendering it. This is useful for ToOneAttributeMapping and EntityCollectionPart,
where we need a table group for the association, but aren't sure which columns are needed yet.
Deferring initialization enables getting away with fewer joins in case only foreign key columns are used.
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionLazyTableGroup(boolean canUseInnerJoins, NavigablePath navigablePath, boolean fetched, Supplier<TableGroup> tableGroupSupplier, LazyTableGroup.ParentTableGroupUseChecker parentTableGroupUseChecker, TableGroupProducer tableGroupProducer, String sourceAlias, SqlAliasBase sqlAliasBase, SessionFactoryImplementor sessionFactory, TableGroup parentTableGroup) -
Method Summary
Modifier and TypeMethodDescriptionvoidA nested table group join is a join against a table group, that is ensured to be joined against the primary table reference and table reference joins in isolation, prior to doing other table group joins e.g.voidvoidapplyAffectedTableNames(Consumer<String> nameCollector) booleanThe type for this expressionIf we want to use CTE for TableGroup rendering we will need to know the alias we can use for the groupgetTableReference(NavigablePath navigablePath, String tableExpression, boolean resolve) Returns the table reference for the table expression, or null if not found.getTableReference(NavigablePath navigablePath, ValuedModelPart modelPart, String tableExpression, boolean resolve) booleanbooleanIf this is a lazy table group, it may report that it is not initialized, which would also mean that a join referring to this table group should not be rendered.booleanbooleanvoidsetTableGroupInitializerCallback(Consumer<TableGroup> tableGroupConsumer) voidvisitNestedTableGroupJoins(Consumer<TableGroupJoin> consumer) voidvisitTableGroupJoins(Consumer<TableGroupJoin> consumer) Methods inherited from class org.hibernate.sql.ast.tree.from.DelegatingTableGroup
accept, applySqlSelections, createDomainResult, createSqlSelection, getColumnReference, getPrimaryTableReference, getSqlExpression, prependTableGroupJoinMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.hibernate.sql.ast.tree.from.ColumnReferenceQualifier
getTableReference, getTableReference, resolveTableReference, resolveTableReference, resolveTableReferenceMethods inherited from interface org.hibernate.sql.ast.tree.expression.Expression
createDomainResultSqlSelectionMethods inherited from interface org.hibernate.query.sqm.sql.internal.SqmPathInterpretation
getAffectedTableNameMethods inherited from interface org.hibernate.sql.ast.tree.from.TableGroup
findCompatibleJoin, findCompatibleJoinedGroup, findTableGroupJoin, findTableReference, hasRealJoins, isVirtual
-
Constructor Details
-
Method Details
-
isInitialized
public boolean isInitialized()Description copied from interface:TableGroupIf this is a lazy table group, it may report that it is not initialized, which would also mean that a join referring to this table group should not be rendered.- Specified by:
isInitializedin interfaceTableGroup- Overrides:
isInitializedin classDelegatingTableGroup
-
getUnderlyingTableGroup
-
getTableGroup
- Specified by:
getTableGroupin classDelegatingTableGroup
-
setTableGroupInitializerCallback
-
applyAffectedTableNames
- Specified by:
applyAffectedTableNamesin interfaceTableGroup- Overrides:
applyAffectedTableNamesin classDelegatingTableGroup
-
getTableReferenceJoins
- Specified by:
getTableReferenceJoinsin interfaceTableGroup- Overrides:
getTableReferenceJoinsin classDelegatingTableGroup
-
getTableGroupJoins
- Specified by:
getTableGroupJoinsin interfaceTableGroup- Overrides:
getTableGroupJoinsin classDelegatingTableGroup
-
getNestedTableGroupJoins
- Specified by:
getNestedTableGroupJoinsin interfaceTableGroup- Overrides:
getNestedTableGroupJoinsin classDelegatingTableGroup
-
addTableGroupJoin
- Specified by:
addTableGroupJoinin interfaceTableGroup- Overrides:
addTableGroupJoinin classDelegatingTableGroup
-
addNestedTableGroupJoin
Description copied from interface:TableGroupA nested table group join is a join against a table group, that is ensured to be joined against the primary table reference and table reference joins in isolation, prior to doing other table group joins e.g.select * from entity1 e left join ( collection_table c1 join association a on a.id = c1.target_id ) on c1.entity_id = e.id and c1.key = 1is modeled asTableGroup( primaryTableReference = TableReference(entity1, e), tableGroupJoins = [ TableGroupJoin( TableGroup( primaryTableReference = TableReference(collection_table, c1), nestedTableGroupJoins = [ TableGroupJoin( TableGroup( primaryTableReference = TableReference(association, a) ) ) ] ) ) ] )This is necessary to correctly retain the cardinality of an HQL join like e.g.from Entity1 e left join e.collectionAssociation c on key(c) = 1- Specified by:
addNestedTableGroupJoinin interfaceTableGroup- Overrides:
addNestedTableGroupJoinin classDelegatingTableGroup
-
visitTableGroupJoins
- Specified by:
visitTableGroupJoinsin interfaceTableGroup- Overrides:
visitTableGroupJoinsin classDelegatingTableGroup
-
visitNestedTableGroupJoins
- Specified by:
visitNestedTableGroupJoinsin interfaceTableGroup- Overrides:
visitNestedTableGroupJoinsin classDelegatingTableGroup
-
canUseInnerJoins
public boolean canUseInnerJoins()- Specified by:
canUseInnerJoinsin interfaceTableGroup- Overrides:
canUseInnerJoinsin classDelegatingTableGroup
-
getGroupAlias
Description copied from interface:TableGroupIf we want to use CTE for TableGroup rendering we will need to know the alias we can use for the group- Specified by:
getGroupAliasin interfaceTableGroup- Overrides:
getGroupAliasin classDelegatingTableGroup
-
getModelPart
- Specified by:
getModelPartin interfaceTableGroup- Overrides:
getModelPartin classDelegatingTableGroup
-
getExpressionType
Description copied from interface:ExpressionThe type for this expression- Specified by:
getExpressionTypein interfaceExpression- Specified by:
getExpressionTypein interfaceSqmPathInterpretation- Overrides:
getExpressionTypein classDelegatingTableGroup
-
getSourceAlias
- Specified by:
getSourceAliasin interfaceTableGroup- Overrides:
getSourceAliasin classDelegatingTableGroup
-
isRealTableGroup
public boolean isRealTableGroup()- Specified by:
isRealTableGroupin interfaceTableGroup- Overrides:
isRealTableGroupin classDelegatingTableGroup
-
isFetched
public boolean isFetched()- Specified by:
isFetchedin interfaceTableGroup- Overrides:
isFetchedin classDelegatingTableGroup
-
isLateral
public boolean isLateral()- Specified by:
isLateralin interfaceTableGroup- Overrides:
isLateralin classDelegatingTableGroup
-