HHH-18494 Always use standard table group in result builder entity
Also ignore placeholder aliases for to-one properties using join-tables, and use the target column name instead
This commit is contained in:
parent
30b0c55e1d
commit
89629bc702
|
@ -28,7 +28,6 @@ import org.hibernate.query.NativeQuery;
|
|||
import org.hibernate.query.results.DomainResultCreationStateImpl;
|
||||
import org.hibernate.query.results.FetchBuilder;
|
||||
import org.hibernate.query.results.ResultsHelper;
|
||||
import org.hibernate.query.results.TableGroupImpl;
|
||||
import org.hibernate.query.results.complete.CompleteFetchBuilder;
|
||||
import org.hibernate.spi.NavigablePath;
|
||||
import org.hibernate.sql.ast.spi.FromClauseAccess;
|
||||
|
@ -196,15 +195,17 @@ public class DynamicResultBuilderEntityStandard
|
|||
final TableGroup tableGroup = fromClauseAccess.resolveTableGroup(
|
||||
elementNavigablePath,
|
||||
np -> {
|
||||
final TableReference tableReference = entityMapping.createPrimaryTableReference(
|
||||
new SqlAliasBaseConstant( tableAlias ),
|
||||
creationState
|
||||
);
|
||||
|
||||
if ( lockMode != null ) {
|
||||
domainResultCreationState.getSqlAstCreationState().registerLockMode( tableAlias, lockMode );
|
||||
}
|
||||
return new TableGroupImpl( elementNavigablePath, tableAlias, tableReference, entityMapping );
|
||||
return entityMapping.createRootTableGroup(
|
||||
true,
|
||||
navigablePath,
|
||||
tableAlias,
|
||||
new SqlAliasBaseConstant( tableAlias ),
|
||||
null,
|
||||
creationState
|
||||
);
|
||||
}
|
||||
);
|
||||
final TableReference tableReference = tableGroup.getPrimaryTableReference();
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.hibernate.internal.util.collections.ArrayHelper;
|
|||
import org.hibernate.loader.internal.AliasConstantsHelper;
|
||||
import org.hibernate.metamodel.mapping.CollectionPart;
|
||||
import org.hibernate.metamodel.mapping.EntityMappingType;
|
||||
import org.hibernate.metamodel.mapping.internal.ToOneAttributeMapping;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
import org.hibernate.persister.collection.QueryableCollection;
|
||||
import org.hibernate.persister.collection.SQLLoadableCollection;
|
||||
|
@ -399,6 +400,17 @@ public class ResultSetMappingProcessor implements SQLQueryParser.ParserContext {
|
|||
resultBuilderEntity.addFetchBuilder( propertyName, fetchBuilder );
|
||||
}
|
||||
else if ( columnAliases.length != 0 ) {
|
||||
if ( propertyType instanceof EntityType ) {
|
||||
final ToOneAttributeMapping toOne = (ToOneAttributeMapping) loadable.findAttributeMapping( propertyName );
|
||||
if ( !toOne.getIdentifyingColumnsTableExpression().equals( loadable.getMappedTableDetails().getTableName() ) ) {
|
||||
// The to-one has a join-table, use the plain join column name instead of the alias
|
||||
assert columnAliases.length == 1;
|
||||
final String[] targetAliases = new String[1];
|
||||
targetAliases[0] = toOne.getTargetKeyPropertyName();
|
||||
resultBuilderEntity.addProperty( propertyName, targetAliases );
|
||||
return;
|
||||
}
|
||||
}
|
||||
resultBuilderEntity.addProperty( propertyName, columnAliases );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue