HHH-17629 Reuse compatible joins for entity graphs and fetch profiles

This commit is contained in:
Marco Belladelli 2024-01-15 11:39:26 +01:00 committed by Christian Beikov
parent e417dbe0ca
commit 11015687c8
1 changed files with 23 additions and 11 deletions

View File

@ -8169,21 +8169,33 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
fetchablePath,
np -> {
// generate the join
final TableGroup tableGroup;
final TableGroup lhs = fromClauseIndex.getTableGroup( fetchParent.getNavigablePath() );
final TableGroupJoin tableGroupJoin = ( (TableGroupJoinProducer) fetchable ).createTableGroupJoin(
fetchablePath,
lhs,
alias,
null,
null,
true,
false,
BaseSqmToSqlAstConverter.this
final TableGroupJoinProducer joinProducer = (TableGroupJoinProducer) fetchable;
final TableGroup compatibleTableGroup = lhs.findCompatibleJoinedGroup(
joinProducer,
joinProducer.determineSqlJoinType( lhs, null, true )
);
lhs.addTableGroupJoin( tableGroupJoin );
if ( compatibleTableGroup == null ) {
final TableGroupJoin tableGroupJoin = joinProducer.createTableGroupJoin(
fetchablePath,
lhs,
alias,
null,
null,
true,
false,
BaseSqmToSqlAstConverter.this
);
lhs.addTableGroupJoin( tableGroupJoin );
tableGroup = tableGroupJoin.getJoinedGroup();
}
else {
tableGroup = compatibleTableGroup;
}
// and return the joined group
return tableGroupJoin.getJoinedGroup();
return tableGroup;
}
);
}