@@ -4555,7 +4555,6 @@ private MappingModelExpressible<?> determineValueMapping(SqmExpression<?> sqmExp
45554555 }
45564556 else if ( sqmExpression instanceof SqmPath ) {
45574557 log .debugf ( "Determining mapping-model type for SqmPath : %s " , sqmExpression );
4558- prepareReusablePath ( (SqmPath <?>) sqmExpression , fromClauseIndex , () -> null );
45594558 final MappingMetamodel domainModel = creationContext .getSessionFactory ()
45604559 .getRuntimeMetamodels ()
45614560 .getMappingMetamodel ();
@@ -4577,40 +4576,16 @@ else if ( sqmExpression instanceof SqmSubQuery<?> ) {
45774576 final SqmSelectClause selectClause = subQuery .getQuerySpec ().getSelectClause ();
45784577 if ( selectClause .getSelections ().size () == 1 ) {
45794578 final SqmSelection <?> subQuerySelection = selectClause .getSelections ().get ( 0 );
4579+ final SqmSelectableNode <?> selectableNode = subQuerySelection .getSelectableNode ();
4580+ if ( selectableNode instanceof SqmExpression <?> ) {
4581+ return determineValueMapping ( (SqmExpression <?>) selectableNode , fromClauseIndex );
4582+ }
45804583 final SqmExpressible <?> selectionNodeType = subQuerySelection .getNodeType ();
45814584 if ( selectionNodeType != null ) {
4582- final SqmExpressible <?> sqmExpressible ;
4583- if ( selectionNodeType instanceof PluralPersistentAttribute ) {
4584- sqmExpressible = ( (PluralPersistentAttribute <?,?,?>) selectionNodeType ).getElementPathSource ();
4585- }
4586- else if ( selectionNodeType instanceof SqmPathSource <?>) {
4587- final SqmPathSource <?> pathSource = (SqmPathSource <?>) selectionNodeType ;
4588- final CollectionPart .Nature partNature = CollectionPart .Nature .fromName (
4589- pathSource .getPathName ()
4590- );
4591- if ( partNature == null ) {
4592- sqmExpressible = selectionNodeType ;
4593- }
4594- else {
4595- final SqmPath <?> sqmPath = (SqmPath <?>) subQuerySelection .getSelectableNode ();
4596- final NavigablePath navigablePath = sqmPath .getNavigablePath ().getParent ();
4597- if ( navigablePath .getParent () != null ) {
4598- final TableGroup parentTableGroup = fromClauseIndex .findTableGroup ( navigablePath .getParent () );
4599- final PluralAttributeMapping pluralPart = (PluralAttributeMapping ) parentTableGroup .getModelPart ()
4600- .findSubPart ( navigablePath .getUnaliasedLocalName (), null );
4601- return pluralPart .findSubPart ( pathSource .getPathName (), null );
4602- }
4603- return fromClauseIndex .findTableGroup ( navigablePath ).getModelPart ();
4604- }
4605- }
4606- else {
4607- sqmExpressible = selectionNodeType ;
4608- }
4609-
46104585 final MappingMetamodel domainModel = creationContext .getSessionFactory ()
46114586 .getRuntimeMetamodels ()
46124587 .getMappingMetamodel ();
4613- final MappingModelExpressible <?> expressible = domainModel .resolveMappingExpressible (sqmExpressible , this ::findTableGroupByPath );
4588+ final MappingModelExpressible <?> expressible = domainModel .resolveMappingExpressible (selectionNodeType , this ::findTableGroupByPath );
46144589
46154590 if ( expressible != null ) {
46164591 return expressible ;
0 commit comments