diff --git a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java index c57d188eb0..7739d218be 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SqmPathRegistryImpl.java @@ -16,8 +16,8 @@ import java.util.function.Function; import org.hibernate.jpa.spi.JpaCompliance; import org.hibernate.metamodel.model.domain.BasicDomainType; import org.hibernate.metamodel.model.domain.JpaMetamodel; -import org.hibernate.query.criteria.JpaCrossJoin; import org.hibernate.query.SemanticException; +import org.hibernate.query.criteria.JpaCrossJoin; import org.hibernate.query.hql.HqlLogging; import org.hibernate.query.hql.spi.SqmCreationProcessingState; import org.hibernate.query.hql.spi.SqmPathRegistry; @@ -254,6 +254,15 @@ public class SqmPathRegistryImpl implements SqmPathRegistry { } } + final boolean onlyOneFrom = sqmFromByPath.size() == 1; + if ( onlyOneFrom && localAlias.equals( "this" ) ) { + final SqmRoot root = (SqmRoot) sqmFromByPath.entrySet().iterator().next().getValue(); + if ( root.getAlias() == null ) { + //noinspection unchecked + return (X) root; + } + } + return null; } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/thisalias/HQLThisTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/thisalias/HQLThisTest.java index d5212310b9..8ff08b451e 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/thisalias/HQLThisTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/thisalias/HQLThisTest.java @@ -13,8 +13,6 @@ import org.junit.jupiter.api.Test; @SessionFactory @DomainModel(annotatedClasses = HQLThisTest.This.class) -@FailureExpected( jiraKey = "HHH-18536", reason = "Support implicit \"this\" alias in HQL" ) -@Jira( "https://hibernate.atlassian.net/browse/HHH-18536" ) public class HQLThisTest { @Test void test(SessionFactoryScope scope) {