diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/spi/SqmCreationHelper.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/spi/SqmCreationHelper.java index 1ba493beea19..1643dd2c40d3 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/spi/SqmCreationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/spi/SqmCreationHelper.java @@ -75,14 +75,14 @@ public static NavigablePath buildSubNavigablePath(SqmPath lhs, String subNavi return buildSubNavigablePath( navigablePath, subNavigable, alias ); } - public static SqmPredicate combinePredicates(SqmPredicate baseRestriction, List incomingRestrictions) { + public static SqmPredicate combinePredicates(SqmPredicate baseRestriction, List incomingRestrictions) { if ( isEmpty( incomingRestrictions ) ) { return baseRestriction; } SqmPredicate combined = combinePredicates( null, baseRestriction ); for ( int i = 0; i < incomingRestrictions.size(); i++ ) { - combined = combinePredicates( combined, incomingRestrictions.get(i) ); + combined = combinePredicates( combined, (SqmPredicate) incomingRestrictions.get(i) ); } return combined; } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/AbstractSqmExpression.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/AbstractSqmExpression.java index 5dc991fb1919..37fa5f69fb88 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/AbstractSqmExpression.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/AbstractSqmExpression.java @@ -157,6 +157,7 @@ public SqmPredicate in(Expression> values) { @Override public @Nullable JavaType getJavaTypeDescriptor() { - return getNodeType() == null ? null : getNodeType().getExpressibleJavaType(); + final SqmBindableType nodeType = getNodeType(); + return nodeType == null ? null : nodeType.getExpressibleJavaType(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmEnumLiteral.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmEnumLiteral.java index 7bc20691c084..ee2c98f37ead 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmEnumLiteral.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmEnumLiteral.java @@ -127,24 +127,28 @@ public SqmPath resolveIndexedAccess( ); } + private Integer ordinalValue() { + return getExpressibleJavaType().toOrdinal( enumValue ); + } + @Override public SqmExpression asLong() { - return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).longValue() ); + return nodeBuilder().literal( ordinalValue().longValue() ); } @Override public SqmExpression asInteger() { - return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ) ); + return nodeBuilder().literal( ordinalValue() ); } @Override public SqmExpression asFloat() { - return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).floatValue() ); + return nodeBuilder().literal( ordinalValue().floatValue() ); } @Override public SqmExpression asDouble() { - return nodeBuilder().literal( getExpressibleJavaType().toOrdinal( enumValue ).doubleValue() ); + return nodeBuilder().literal( ordinalValue().doubleValue() ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/from/SqmRoot.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/from/SqmRoot.java index 06fdabf4e89c..57b7d862cc74 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/from/SqmRoot.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/from/SqmRoot.java @@ -153,9 +153,9 @@ public String getEntityName() { @Override public String toString() { - return getExplicitAlias() == null - ? getEntityName() - : getEntityName() + " as " + getExplicitAlias(); + final String entityName = getEntityName(); + final String explicitAlias = getExplicitAlias(); + return explicitAlias == null ? entityName : entityName + " as " + explicitAlias; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSelectStatement.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSelectStatement.java index 59e708505c47..46ba0712d0c7 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSelectStatement.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSelectStatement.java @@ -188,17 +188,9 @@ public SqmQuerySpec getQuerySpec() { } public boolean producesUniqueResults() { - return producesUniqueResults( getQueryPart() ); - } - - private boolean producesUniqueResults(SqmQueryPart queryPart) { - if ( queryPart instanceof SqmQuerySpec querySpec ) { - return querySpec.producesUniqueResults(); - } - else { - // For query groups we have to assume that duplicates are possible - return true; - } + // For query groups we have to assume that duplicates are possible + return !( getQueryPart() instanceof SqmQuerySpec querySpec ) + || querySpec.producesUniqueResults(); } public boolean containsCollectionFetches() { @@ -322,8 +314,8 @@ public SqmSelectStatement where(List restrictions) { @Override public SqmSelectStatement having(List restrictions) { - //noinspection unchecked,rawtypes - final SqmPredicate combined = combinePredicates( getQuerySpec().getHavingClausePredicate(), (List) restrictions ); + final SqmPredicate combined = + combinePredicates( getQuerySpec().getHavingClausePredicate(), restrictions ); getQuerySpec().setHavingClausePredicate( combined ); return this; } diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSubQuery.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSubQuery.java index 2dbb73f9ca39..3b9f34dc86f2 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSubQuery.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSubQuery.java @@ -238,9 +238,8 @@ public SqmQuery getContainingQuery() { @Override public SqmSelectQuery getParent() { - final SqmQuery containingQuery = getContainingQuery(); - // JPA only allows sub-queries on select queries - if ( containingQuery instanceof SqmSelectQuery sqmSelectQuery ) { + // JPA only allows subqueries on select queries + if ( getContainingQuery() instanceof SqmSelectQuery sqmSelectQuery ) { return sqmSelectQuery; } else { @@ -656,39 +655,43 @@ private void applyInferableType(Class type) { } } + private SqmExpression castToBasicType(Class type) { + return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( type ) ); + } + @Override public SqmExpression asLong() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Long.class ) ); + return castToBasicType( Long.class ); } @Override public SqmExpression asInteger() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Integer.class ) ); + return castToBasicType( Integer.class ); } @Override public SqmExpression asFloat() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Float.class ) ); + return castToBasicType( Float.class ); } @Override public SqmExpression asDouble() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( Double.class ) ); + return castToBasicType( Double.class ); } @Override public SqmExpression asBigDecimal() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( BigDecimal.class ) ); + return castToBasicType( BigDecimal.class ); } @Override public SqmExpression asBigInteger() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( BigInteger.class ) ); + return castToBasicType( BigInteger.class ); } @Override public SqmExpression asString() { - return castAs( nodeBuilder().getTypeConfiguration().getBasicTypeForJavaType( String.class ) ); + return castToBasicType( String.class ); } @Override @@ -698,10 +701,8 @@ public SqmExpression as(Class type) { @Override public JavaType getJavaTypeDescriptor() { - if ( getNodeType() == null ) { - return null; - } - return getNodeType().getExpressibleJavaType(); + final SqmBindableType nodeType = getNodeType(); + return nodeType == null ? null : nodeType.getExpressibleJavaType(); } @Override @@ -728,8 +729,8 @@ public Subquery where(List restrictions) { @Override public Subquery having(List restrictions) { - //noinspection unchecked,rawtypes - final SqmPredicate combined = combinePredicates( getQuerySpec().getHavingClausePredicate(), (List) restrictions ); + final SqmPredicate combined = + combinePredicates( getQuerySpec().getHavingClausePredicate(), restrictions ); getQuerySpec().setHavingClausePredicate( combined ); return this; }