diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java index 5c8eb7565da3..ceadd53f1d86 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java @@ -80,14 +80,24 @@ String specificationType() { } @Override - void createQuery(StringBuilder declaration) { + void createQuery(StringBuilder declaration, boolean declareVariable) { + if ( declareVariable ) { + if ( dataRepository && !isReactive() ) { + declaration + .append('\t'); + } + declaration + .append('\t'); + declaration + .append("var _select = "); + } final boolean specification = isUsingSpecification(); if ( specification && !isReactive() ) { declaration .append("_spec.createQuery(") .append(localSessionName()) .append(getObjectCall()) - .append(")\n"); + .append(")"); } else { declaration @@ -103,7 +113,7 @@ void createQuery(StringBuilder declaration) { else { declaration.append("_query"); } - declaration.append(")\n"); + declaration.append( ")" ); } } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java index 65e43eef6ab6..9405f757fdd6 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java @@ -453,10 +453,10 @@ void makeKeyedPage(StringBuilder declaration, List paramTypes) { "\t\t\t\t_results.isFirstPage() ? null : beforeCursor(_cursors.get(0), pageRequest.page()-1, pageRequest.size(), pageRequest.requestTotal()))"; static final String MAKE_KEYED_PAGE - = "\tvar _unkeyedPage =\n" + + = "\t\tvar _unkeyedPage =\n" + "\t\t\tpage(pageRequest.size(), (int) pageRequest.page()-1)\n" + "\t\t\t\t\t.keyedBy(_orders);\n" + - "\tvar _keyedPage =\n" + + "\t\tvar _keyedPage =\n" + "\t\t\tpageRequest.cursor()\n" + "\t\t\t\t\t.map(_cursor -> {\n" + "\t\t\t\t\t\t@SuppressWarnings(\"unchecked\")\n" + @@ -468,22 +468,25 @@ void makeKeyedPage(StringBuilder declaration, List paramTypes) { "\t\t\t\t\t\t};\n" + "\t\t\t\t\t}).orElse(_unkeyedPage);"; - void createQuery(StringBuilder declaration) {} + void createQuery(StringBuilder declaration, boolean declareVariable) {} void createSpecification(StringBuilder declaration) {} - void setParameters(StringBuilder declaration, List paramTypes, String indent) {} + void setParameters(StringBuilder declaration, List paramTypes) {} - void tryReturn(StringBuilder declaration, List paramTypes, @Nullable String containerType) { - if ( isJakartaCursoredPage(containerType) ) { - makeKeyedPage( declaration, paramTypes ); - } + void inTry(StringBuilder declaration) { if ( dataRepository && !isReactive() ) { declaration .append("\ttry {\n"); } - if ( JD_CURSORED_PAGE.equals(containerType) - || JD_PAGE.equals(containerType) ) { + } + + void results(StringBuilder declaration, List paramTypes, @Nullable String containerType) { + if ( isJakartaCursoredPage(containerType) ) { + makeKeyedPage( declaration, paramTypes ); + } + if ( isJakartaCursoredPage(containerType) + || isJakartaPage(containerType) ) { if ( dataRepository ) { declaration .append('\t'); @@ -522,6 +525,11 @@ void tryReturn(StringBuilder declaration, List paramTypes, @Nullable Str } } + void select(StringBuilder declaration) { + declaration + .append("_select\n"); + } + private void totalResults(StringBuilder declaration, List paramTypes) { declaration .append("\tlong _totalResults = \n\t\t\t\t"); @@ -532,8 +540,7 @@ private void totalResults(StringBuilder declaration, List paramTypes) { declaration .append(parameterName(JD_PAGE_REQUEST, paramTypes, paramNames)) .append(".requestTotal()\n\t\t\t\t\t\t? "); - createQuery( declaration ); - setParameters( declaration, paramTypes, "\t\t\t\t\t"); + select( declaration ); if ( isUsingEntityManager() ) { declaration .append("\t\t\t\t\t"); diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java index ed78a0c4b9b8..58d88fc997b7 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaDeleteMethod.java @@ -57,7 +57,7 @@ void executeQuery(StringBuilder declaration, List paramTypes) { createSpecification( declaration ); handleRestrictionParameters( declaration, paramTypes ); tryReturn(declaration); - createQuery( declaration ); + createQuery( declaration, false ); execute( declaration ); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java index 9545578ce2d1..b646738e94a4 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java @@ -57,9 +57,12 @@ void executeQuery(StringBuilder declaration, List paramTypes) { createSpecification( declaration ); handleRestrictionParameters( declaration, paramTypes ); collectOrdering( declaration, paramTypes, containerType ); - tryReturn( declaration, paramTypes, containerType ); + inTry( declaration ); + createQuery( declaration, true ); + declaration.append( ";\n" ); + results( declaration, paramTypes, containerType ); castResult( declaration ); - createQuery( declaration ); + select( declaration ); handlePageParameters( declaration, paramTypes, containerType ); boolean unwrapped = initiallyUnwrapped(); unwrapped = enableFetchProfile( declaration, unwrapped ); diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java index 15770caf2c69..6e330a49f634 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java @@ -97,10 +97,13 @@ public String getAttributeDeclarationString() { handleRestrictionParameters( declaration, paramTypes ); collectOrdering( declaration, paramTypes, containerType ); chainSession( declaration ); - tryReturn( declaration, paramTypes, containerType ); + inTry( declaration ); + createQuery( declaration, true ); + setParameters( declaration, paramTypes ); + declaration.append( ";\n" ); + results( declaration, paramTypes, containerType ); castResult( declaration ); - createQuery( declaration ); - setParameters( declaration, paramTypes, ""); + select( declaration ); handlePageParameters( declaration, paramTypes, containerType ); execute( declaration, initiallyUnwrapped() ); convertExceptions( declaration ); @@ -116,7 +119,16 @@ String specificationType() { } @Override - void createQuery(StringBuilder declaration) { + void createQuery(StringBuilder declaration, boolean declareVariable) { + if ( declareVariable ) { + if ( dataRepository && !isReactive() ) { + declaration + .append('\t'); + } + declaration + .append('\t'); + declaration.append("var _select = "); + } if ( isUsingSpecification() ) { if ( isReactive() ) { declaration @@ -130,7 +142,7 @@ void createQuery(StringBuilder declaration) { .append("_spec.createQuery(") .append(localSessionName()) .append(getObjectCall()) - .append(")\n"); + .append(")"); } } else { @@ -147,7 +159,7 @@ void createQuery(StringBuilder declaration) { .append(annotationMetaEntity.importType(returnTypeClass)) .append(".class"); } - declaration.append(")\n"); + declaration.append(")"); } } @@ -225,17 +237,15 @@ else if ( BOOLEAN.equals(returnTypeName) ) { } @Override - void setParameters(StringBuilder declaration, List paramTypes, String indent) { + void setParameters(StringBuilder declaration, List paramTypes) { for ( int i = 0; i < paramNames.size(); i++ ) { if ( !isSpecialParam( paramTypes.get(i) ) ) { final String paramName = paramNames.get(i); final int ordinal = i+1; if ( queryString.contains(":" + paramName) ) { - declaration.append(indent); setNamedParameter( declaration, paramName ); } else if ( queryString.contains("?" + ordinal) ) { - declaration.append(indent); setOrdinalParameter( declaration, ordinal, paramName ); } } @@ -244,20 +254,20 @@ else if ( queryString.contains("?" + ordinal) ) { private static void setOrdinalParameter(StringBuilder declaration, int i, String paramName) { declaration - .append("\t\t\t.setParameter(") + .append("\n\t\t\t.setParameter(") .append(i) .append(", ") .append(paramName) - .append(")\n"); + .append(")"); } private static void setNamedParameter(StringBuilder declaration, String paramName) { declaration - .append("\t\t\t.setParameter(\"") + .append("\n\t\t\t.setParameter(\"") .append(paramName) .append("\", ") .append(paramName) - .append(")\n"); + .append(")"); } // private String returnType() {