Skip to content

Commit 25c6060

Browse files
committed
HHH-18979 allow Hibernate Restriction as a query method parameter
1 parent df554df commit 25c6060

File tree

5 files changed

+28
-1
lines changed

5 files changed

+28
-1
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.hibernate.processor.util.Constants.HIB_ORDER;
2020
import static org.hibernate.processor.util.Constants.HIB_PAGE;
2121
import static org.hibernate.processor.util.Constants.HIB_QUERY;
22+
import static org.hibernate.processor.util.Constants.HIB_RESTRICTION;
2223
import static org.hibernate.processor.util.Constants.HIB_SELECTION_QUERY;
2324
import static org.hibernate.processor.util.Constants.HIB_SORT_DIRECTION;
2425
import static org.hibernate.processor.util.Constants.JD_CURSORED_PAGE;
@@ -286,6 +287,21 @@ void handlePageParameters(
286287
}
287288
}
288289

290+
void handleRestrictionParameters(
291+
StringBuilder declaration, List<String> paramTypes,
292+
@Nullable String containerType) {
293+
for ( int i = 0; i < paramNames.size(); i ++ ) {
294+
final String paramName = paramNames.get(i);
295+
final String paramType = paramTypes.get(i);
296+
if ( isRestrictionParam(paramType) ) {
297+
declaration
298+
.append("\t\t\t.addRestriction(")
299+
.append(paramName)
300+
.append(")\n");
301+
}
302+
}
303+
}
304+
289305
void convertExceptions(StringBuilder declaration) {
290306
if ( dataRepository ) {
291307
if ( !isReactive() ) {
@@ -329,6 +345,7 @@ void unwrapQuery(StringBuilder declaration, boolean unwrapped) {
329345

330346
static boolean isSpecialParam(String parameterType) {
331347
return isPageParam(parameterType)
348+
|| isRestrictionParam(parameterType)
332349
|| isOrderParam(parameterType)
333350
|| isKeyedPageParam(parameterType)
334351
|| isSessionParameter(parameterType);
@@ -351,6 +368,10 @@ static boolean isOrderParam(String parameterType) {
351368
|| parameterType.startsWith(JD_ORDER);
352369
}
353370

371+
static boolean isRestrictionParam(String parameterType) {
372+
return parameterType.startsWith(HIB_RESTRICTION);
373+
}
374+
354375
static boolean isJakartaCursoredPage(@Nullable String containerType) {
355376
return JD_CURSORED_PAGE.equals(containerType);
356377
}

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import static org.hibernate.grammars.hql.HqlLexer.WHERE;
7676
import static org.hibernate.internal.util.StringHelper.qualify;
7777
import static org.hibernate.internal.util.StringHelper.unqualify;
78+
import static org.hibernate.processor.annotation.AbstractQueryMethod.isRestrictionParam;
7879
import static org.hibernate.processor.annotation.AbstractQueryMethod.isSessionParameter;
7980
import static org.hibernate.processor.annotation.AbstractQueryMethod.isSpecialParam;
8081
import static org.hibernate.processor.annotation.QueryMethod.isOrderParam;
@@ -1669,7 +1670,8 @@ private void createCriteriaFinder(
16691670
private void checkFinderParameter(TypeElement entity, VariableElement parameter) {
16701671
final Types types = context.getTypeUtils();
16711672
final TypeMirror parameterType = parameterType(parameter);
1672-
if ( isOrderParam( typeName(parameterType) ) ) {
1673+
final String typeName = typeName( parameterType );
1674+
if ( isOrderParam( typeName ) || isRestrictionParam( typeName ) ) {
16731675
final TypeMirror typeArgument = getTypeArgument( parameterType, entity );
16741676
if ( typeArgument == null ) {
16751677
missingTypeArgError( entity.getSimpleName().toString(), parameter );
@@ -1790,6 +1792,7 @@ private OrderBy orderByExpression(AnnotationMirror orderBy, TypeElement entityTy
17901792
}
17911793
return null;
17921794
case HIB_ORDER:
1795+
case HIB_RESTRICTION:
17931796
case JD_SORT:
17941797
case JD_ORDER:
17951798
for ( TypeMirror arg : type.getTypeArguments() ) {

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/CriteriaFinderMethod.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ void executeQuery(StringBuilder declaration, List<String> paramTypes) {
5858
tryReturn( declaration, paramTypes, containerType );
5959
castResult( declaration );
6060
createQuery( declaration );
61+
handleRestrictionParameters( declaration, paramTypes, containerType );
6162
handlePageParameters( declaration, paramTypes, containerType );
6263
boolean unwrapped = !isUsingEntityManager();
6364
unwrapped = enableFetchProfile( declaration, unwrapped );

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public String getAttributeDeclarationString() {
9797
tryReturn( declaration, paramTypes, containerType );
9898
castResult( declaration );
9999
createQuery( declaration );
100+
handleRestrictionParameters( declaration, paramTypes, containerType );
100101
setParameters( declaration, paramTypes, "");
101102
handlePageParameters( declaration, paramTypes, containerType );
102103
boolean unwrapped = !isUsingEntityManager();

tooling/metamodel-generator/src/main/java/org/hibernate/processor/util/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public final class Constants {
9191
public static final String HIB_KEYED_PAGE = "org.hibernate.query.KeyedPage";
9292
public static final String HIB_KEYED_RESULT_LIST = "org.hibernate.query.KeyedResultList";
9393
public static final String HIB_SORT_DIRECTION = "org.hibernate.query.SortDirection";
94+
public static final String HIB_RESTRICTION = "org.hibernate.query.Restriction";
9495

9596
public static final String CHECK_HQL = "org.hibernate.annotations.processing.CheckHQL";
9697

0 commit comments

Comments
 (0)