Package org.hibernate.sql.ast.tree.from
Class CorrelatedTableGroup
- java.lang.Object
-
- org.hibernate.sql.ast.tree.from.AbstractColumnReferenceQualifier
-
- org.hibernate.sql.ast.tree.from.AbstractTableGroup
-
- org.hibernate.sql.ast.tree.from.CorrelatedTableGroup
-
- All Implemented Interfaces:
DomainResultProducer
,SqmPathInterpretation
,SqlSelectionProducer
,Expression
,ColumnReferenceQualifier
,TableGroup
,SqlAstNode
- Direct Known Subclasses:
CorrelatedPluralTableGroup
public class CorrelatedTableGroup extends AbstractTableGroup
A virtualTableReference
for correlated roots. Table group joins are pushed into the from clause as roots and join predicates to the where clause.
-
-
Constructor Summary
Constructors Constructor Description CorrelatedTableGroup(TableGroup correlatedTableGroup, SqlAliasBase sqlAliasBase, QuerySpec querySpec, Consumer<Predicate> joinPredicateConsumer, SessionFactoryImplementor sessionFactory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addNestedTableGroupJoin(TableGroupJoin join)
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
addTableGroupJoin(TableGroupJoin join)
void
applyAffectedTableNames(Consumer<String> nameCollector)
Consumer<Predicate>
getJoinPredicateConsumer()
TableReference
getPrimaryTableReference()
protected TableReference
getTableReferenceInternal(NavigablePath navigablePath, String tableExpression, boolean allowFkOptimization, boolean resolve)
List<TableReferenceJoin>
getTableReferenceJoins()
void
prependTableGroupJoin(NavigablePath navigablePath, TableGroupJoin join)
Adds the given table group join before a join as found via the given navigable path.-
Methods inherited from class org.hibernate.sql.ast.tree.from.AbstractTableGroup
canUseInnerJoins, getExpressionType, getGroupAlias, getModelPart, getNavigablePath, getNestedTableGroupJoins, getSessionFactory, getSourceAlias, getSqlAliasBase, getTableGroupJoins, isRealTableGroup, toString, visitNestedTableGroupJoins, visitTableGroupJoins
-
Methods inherited from class org.hibernate.sql.ast.tree.from.AbstractColumnReferenceQualifier
getTableReference, resolveTableReference
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.hibernate.sql.ast.tree.from.ColumnReferenceQualifier
getTableReference, getTableReference, getTableReference, resolveTableReference, resolveTableReference, resolveTableReference
-
Methods inherited from interface org.hibernate.sql.ast.tree.expression.Expression
createSqlSelection, getColumnReference
-
Methods inherited from interface org.hibernate.query.sqm.sql.internal.SqmPathInterpretation
getSqlExpression
-
Methods inherited from interface org.hibernate.sql.ast.tree.from.TableGroup
accept, applySqlSelections, createDomainResult, isFetched, isInitialized, isLateral
-
-
-
-
Constructor Detail
-
CorrelatedTableGroup
public CorrelatedTableGroup(TableGroup correlatedTableGroup, SqlAliasBase sqlAliasBase, QuerySpec querySpec, Consumer<Predicate> joinPredicateConsumer, SessionFactoryImplementor sessionFactory)
-
-
Method Detail
-
addTableGroupJoin
public void addTableGroupJoin(TableGroupJoin join)
- Specified by:
addTableGroupJoin
in interfaceTableGroup
- Overrides:
addTableGroupJoin
in classAbstractTableGroup
-
prependTableGroupJoin
public void prependTableGroupJoin(NavigablePath navigablePath, TableGroupJoin join)
Description copied from interface:TableGroup
Adds the given table group join before a join as found via the given navigable path.- Specified by:
prependTableGroupJoin
in interfaceTableGroup
- Overrides:
prependTableGroupJoin
in classAbstractTableGroup
-
addNestedTableGroupJoin
public void addNestedTableGroupJoin(TableGroupJoin join)
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
- Overrides:
addNestedTableGroupJoin
in classAbstractTableGroup
-
getTableReferenceInternal
protected TableReference getTableReferenceInternal(NavigablePath navigablePath, String tableExpression, boolean allowFkOptimization, boolean resolve)
- Overrides:
getTableReferenceInternal
in classAbstractColumnReferenceQualifier
-
getPrimaryTableReference
public TableReference getPrimaryTableReference()
- Specified by:
getPrimaryTableReference
in interfaceTableGroup
- Specified by:
getPrimaryTableReference
in classAbstractColumnReferenceQualifier
-
getTableReferenceJoins
public List<TableReferenceJoin> getTableReferenceJoins()
- Specified by:
getTableReferenceJoins
in interfaceTableGroup
- Specified by:
getTableReferenceJoins
in classAbstractColumnReferenceQualifier
-
-