Package org.hibernate.sql.ast.tree.from
Class DelegatingTableGroup
java.lang.Object
org.hibernate.sql.ast.tree.from.DelegatingTableGroup
- All Implemented Interfaces:
DomainResultProducer
,SqmPathInterpretation
,SqlSelectionProducer
,Expression
,ColumnReferenceQualifier
,TableGroup
,SqlAstNode
- Direct Known Subclasses:
LazyTableGroup
,MappedByTableGroup
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(SqlAstWalker sqlTreeWalker) void
A 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.void
void
applyAffectedTableNames
(Consumer<String> nameCollector) void
applySqlSelections
(DomainResultCreationState creationState) Used when this producer is a selection in a sub-query.boolean
createDomainResult
(String resultVariable, DomainResultCreationState creationState) Produce the domain querycreateSqlSelection
(int jdbcPosition, int valuesArrayPosition, JavaType javaType, boolean virtual, TypeConfiguration typeConfiguration) Create a SqlSelection for the given JDBC ResultSet positionThe type for this expressionIf we want to use CTE for TableGroup rendering we will need to know the alias we can use for the groupprotected abstract TableGroup
getTableReference
(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) boolean
boolean
If 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.boolean
boolean
void
prependTableGroupJoin
(NavigablePath navigablePath, TableGroupJoin join) Adds the given table group join before a join as found via the given navigable path.void
visitNestedTableGroupJoins
(Consumer<TableGroupJoin> consumer) void
visitTableGroupJoins
(Consumer<TableGroupJoin> consumer) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.hibernate.sql.ast.tree.from.ColumnReferenceQualifier
getTableReference, getTableReference, resolveTableReference, resolveTableReference, resolveTableReference
Methods inherited from interface org.hibernate.sql.ast.tree.expression.Expression
createDomainResultSqlSelection
Methods inherited from interface org.hibernate.sql.ast.tree.from.TableGroup
findCompatibleJoin, findCompatibleJoinedGroup, findTableGroupJoin, findTableReference, hasRealJoins, isVirtual
-
Constructor Details
-
DelegatingTableGroup
public DelegatingTableGroup()
-
-
Method Details
-
getTableGroup
-
getExpressionType
Description copied from interface:Expression
The type for this expression- Specified by:
getExpressionType
in interfaceExpression
- Specified by:
getExpressionType
in interfaceSqmPathInterpretation
-
getSqlExpression
- Specified by:
getSqlExpression
in interfaceSqmPathInterpretation
-
getColumnReference
- Specified by:
getColumnReference
in interfaceExpression
-
createSqlSelection
public SqlSelection createSqlSelection(int jdbcPosition, int valuesArrayPosition, JavaType javaType, boolean virtual, TypeConfiguration typeConfiguration) Description copied from interface:SqlSelectionProducer
Create a SqlSelection for the given JDBC ResultSet position- Specified by:
createSqlSelection
in interfaceExpression
- Specified by:
createSqlSelection
in interfaceSqlSelectionProducer
- Parameters:
jdbcPosition
- The index position used to read values from JDBCvaluesArrayPosition
- The position in our "current JDBC values array"javaType
- The descriptor for the Java type to read the value asvirtual
- Whether the select is virtual or real. SeeSqlSelection.isVirtual()
typeConfiguration
- The associated TypeConfiguration
-
getGroupAlias
Description copied from interface:TableGroup
If we want to use CTE for TableGroup rendering we will need to know the alias we can use for the group- Specified by:
getGroupAlias
in interfaceTableGroup
-
getModelPart
- Specified by:
getModelPart
in interfaceTableGroup
-
getSourceAlias
- Specified by:
getSourceAlias
in interfaceTableGroup
-
getTableGroupJoins
- Specified by:
getTableGroupJoins
in interfaceTableGroup
-
getNestedTableGroupJoins
- Specified by:
getNestedTableGroupJoins
in interfaceTableGroup
-
canUseInnerJoins
public boolean canUseInnerJoins()- Specified by:
canUseInnerJoins
in interfaceTableGroup
-
isLateral
public boolean isLateral()- Specified by:
isLateral
in interfaceTableGroup
-
addTableGroupJoin
- Specified by:
addTableGroupJoin
in interfaceTableGroup
-
addNestedTableGroupJoin
Description copied from interface:TableGroup
A 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 = 1
is 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:
addNestedTableGroupJoin
in interfaceTableGroup
-
visitTableGroupJoins
- Specified by:
visitTableGroupJoins
in interfaceTableGroup
-
visitNestedTableGroupJoins
- Specified by:
visitNestedTableGroupJoins
in interfaceTableGroup
-
applyAffectedTableNames
- Specified by:
applyAffectedTableNames
in interfaceTableGroup
-
getPrimaryTableReference
- Specified by:
getPrimaryTableReference
in interfaceTableGroup
-
getTableReferenceJoins
- Specified by:
getTableReferenceJoins
in interfaceTableGroup
-
createDomainResult
public DomainResult createDomainResult(String resultVariable, DomainResultCreationState creationState) Description copied from interface:DomainResultProducer
Produce the domain query- Specified by:
createDomainResult
in interfaceDomainResultProducer
- Specified by:
createDomainResult
in interfaceTableGroup
-
applySqlSelections
Description copied from interface:DomainResultProducer
Used when this producer is a selection in a sub-query. The DomainResult is only needed for root query of a SELECT statement. This default impl assumes this producer is a true (Sql)Expression- Specified by:
applySqlSelections
in interfaceDomainResultProducer
- Specified by:
applySqlSelections
in interfaceTableGroup
-
accept
- Specified by:
accept
in interfaceSqlAstNode
- Specified by:
accept
in interfaceTableGroup
-
isRealTableGroup
public boolean isRealTableGroup()- Specified by:
isRealTableGroup
in interfaceTableGroup
-
isFetched
public boolean isFetched()- Specified by:
isFetched
in interfaceTableGroup
-
isInitialized
public boolean isInitialized()Description copied from interface:TableGroup
If 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:
isInitialized
in interfaceTableGroup
-