@@ -159,7 +159,7 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
159
159
if (!TYPENAME .equals (selectedField .getName ()) && !IntrospectionUtils .isTransient (from .getJavaType (), selectedField .getName ())) {
160
160
161
161
Path <?> fieldPath = from .get (selectedField .getName ());
162
- Join <?,?> join = null ;
162
+ From <?,?> fetch = null ;
163
163
Optional <Argument > optionalArgument = getArgument (selectedField , OPTIONAL );
164
164
165
165
// Build predicate arguments for singular attributes only
@@ -194,7 +194,7 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
194
194
.orElse (attribute .isOptional ());
195
195
196
196
// Let's apply left outer join to retrieve optional associations
197
- join = reuseJoin (from , selectedField .getName (), isOptional );
197
+ fetch = reuseFetch (from , selectedField .getName (), isOptional );
198
198
}
199
199
}
200
200
} else {
@@ -205,7 +205,7 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
205
205
.orElse (toManyDefaultOptional );
206
206
207
207
// Let's apply join to retrieve associated collection
208
- join = reuseJoin (from , selectedField .getName (), isOptional );
208
+ fetch = reuseFetch (from , selectedField .getName (), isOptional );
209
209
210
210
// TODO add fetch argument parameter
211
211
// Let's fetch element collections to avoid filtering their values used where search criteria
@@ -215,7 +215,7 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
215
215
216
216
// Let's build join fetch graph to avoid Hibernate error:
217
217
// "query specified join fetching, but the owner of the fetched association was not present in the select list"
218
- if (join != null && selectedField .getSelectionSet () != null ) {
218
+ if (fetch != null && selectedField .getSelectionSet () != null ) {
219
219
GraphQLFieldDefinition fieldDefinition = getFieldDef (environment .getGraphQLSchema (),
220
220
this .getObjectType (environment ),
221
221
selectedField );
@@ -225,7 +225,7 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
225
225
fieldDefinition ,
226
226
args );
227
227
// TODO nested where criteria expressions
228
- getFieldArguments (selectedField , query , cb , join , fieldEnvironment );
228
+ getFieldArguments (selectedField , query , cb , fetch , fieldEnvironment );
229
229
}
230
230
}
231
231
}
@@ -317,7 +317,7 @@ protected Predicate getPredicate(CriteriaBuilder cb, Root<?> from, From<?,?> pat
317
317
// If the argument is a list, let's assume we need to join and do an 'in' clause
318
318
if (argumentEntityAttribute instanceof PluralAttribute ) {
319
319
// Apply left outer join to retrieve optional associations
320
- return reuseJoin (from , argument .getName (), false )
320
+ return reuseFetch (from , argument .getName (), false )
321
321
.in (convertValue (environment , argument , argument .getValue ()));
322
322
}
323
323
@@ -373,7 +373,7 @@ protected Predicate getWherePredicate(CriteriaBuilder cb, Root<?> root, From<?,
373
373
return getArgumentPredicate (cb , (path != null ) ? path : root , predicateDataFetchingEnvironment , predicateArgument );
374
374
}
375
375
376
- protected Predicate getArgumentPredicate (CriteriaBuilder cb , From <?,?> path ,
376
+ protected Predicate getArgumentPredicate (CriteriaBuilder cb , From <?,?> from ,
377
377
DataFetchingEnvironment environment , Argument argument ) {
378
378
ObjectValue whereValue = getValue (argument );
379
379
@@ -390,12 +390,12 @@ protected Predicate getArgumentPredicate(CriteriaBuilder cb, From<?,?> path,
390
390
Map <String , Object > arguments = getFieldArguments (environment , it , argument );
391
391
392
392
if (it .getValue () instanceof ArrayValue ) {
393
- return getArrayArgumentPredicate (cb , path ,
393
+ return getArgumentsPredicate (cb , from ,
394
394
argumentEnvironment (environment , arguments ),
395
395
new Argument (it .getName (), it .getValue ()));
396
396
}
397
397
398
- return getArgumentPredicate (cb , path ,
398
+ return getArgumentPredicate (cb , from ,
399
399
argumentEnvironment (environment , arguments ),
400
400
new Argument (it .getName (), it .getValue ()));
401
401
})
@@ -417,15 +417,15 @@ protected Predicate getArgumentPredicate(CriteriaBuilder cb, From<?,?> path,
417
417
new Field (it .getName ()));
418
418
boolean isOptional = false ;
419
419
420
- return getArgumentPredicate (cb , reuseJoin ( path , it .getName (), isOptional ),
420
+ return getArgumentPredicate (cb , reuseFetch ( from , it .getName (), isOptional ),
421
421
wherePredicateEnvironment (environment , fieldDefinition , args ),
422
422
arg );
423
423
}
424
424
}
425
425
426
- return getFieldPredicate (it .getName (),
426
+ return getLogicalPredicate (it .getName (),
427
427
cb ,
428
- path ,
428
+ from ,
429
429
it ,
430
430
argumentEnvironment (environment , args ),
431
431
arg );
@@ -436,7 +436,7 @@ protected Predicate getArgumentPredicate(CriteriaBuilder cb, From<?,?> path,
436
436
return getCompoundPredicate (cb , predicates , logical );
437
437
}
438
438
439
- protected Predicate getArrayArgumentPredicate (CriteriaBuilder cb ,
439
+ protected Predicate getArgumentsPredicate (CriteriaBuilder cb ,
440
440
From <?, ?> path ,
441
441
DataFetchingEnvironment environment ,
442
442
Argument argument ) {
@@ -470,7 +470,7 @@ protected Predicate getArrayArgumentPredicate(CriteriaBuilder cb,
470
470
Argument arg = new Argument (it .getName (), it .getValue ());
471
471
472
472
if (ArrayValue .class .isInstance (it .getValue ())) {
473
- return getArrayArgumentPredicate (cb ,
473
+ return getArgumentsPredicate (cb ,
474
474
path ,
475
475
argumentEnvironment (environment , args ),
476
476
arg );
@@ -502,13 +502,13 @@ protected Predicate getArrayArgumentPredicate(CriteriaBuilder cb,
502
502
new Field (it .getName ()));
503
503
boolean isOptional = false ;
504
504
505
- return getArgumentPredicate (cb , reuseJoin (path , it .getName (), isOptional ),
505
+ return getArgumentPredicate (cb , reuseFetch (path , it .getName (), isOptional ),
506
506
wherePredicateEnvironment (environment , fieldDefinition , args ),
507
507
arg );
508
508
}
509
509
}
510
510
511
- return getFieldPredicate (it .getName (),
511
+ return getLogicalPredicate (it .getName (),
512
512
cb ,
513
513
path ,
514
514
it ,
@@ -545,7 +545,7 @@ private Logical extractLogical(Argument argument) {
545
545
.orElse (Logical .AND );
546
546
}
547
547
548
- private Predicate getArrayFieldPredicate (String fieldName ,
548
+ private Predicate getLogicalPredicates (String fieldName ,
549
549
CriteriaBuilder cb ,
550
550
From <?, ?> path ,
551
551
ObjectField objectField ,
@@ -565,7 +565,7 @@ private Predicate getArrayFieldPredicate(String fieldName,
565
565
Map <String , Object > args = getFieldArguments (environment , it , argument );
566
566
Argument arg = new Argument (it .getName (), it .getValue ());
567
567
568
- return getFieldPredicate (it .getName (),
568
+ return getLogicalPredicate (it .getName (),
569
569
cb ,
570
570
path ,
571
571
it ,
@@ -577,7 +577,7 @@ private Predicate getArrayFieldPredicate(String fieldName,
577
577
return getCompoundPredicate (cb , predicates , logical );
578
578
}
579
579
580
- private Predicate getFieldPredicate (String fieldName , CriteriaBuilder cb , From <?,?> path , ObjectField objectField , DataFetchingEnvironment environment , Argument argument ) {
580
+ private Predicate getLogicalPredicate (String fieldName , CriteriaBuilder cb , From <?,?> path , ObjectField objectField , DataFetchingEnvironment environment , Argument argument ) {
581
581
ObjectValue expressionValue ;
582
582
583
583
if (objectField .getValue () instanceof ObjectValue )
@@ -600,12 +600,12 @@ private Predicate getFieldPredicate(String fieldName, CriteriaBuilder cb, From<?
600
600
Argument arg = new Argument (it .getName (), it .getValue ());
601
601
602
602
if (it .getValue () instanceof ArrayValue ) {
603
- return getArrayFieldPredicate (fieldName , cb , path , it ,
603
+ return getLogicalPredicates (fieldName , cb , path , it ,
604
604
argumentEnvironment (environment , args ),
605
605
arg );
606
606
}
607
607
608
- return getFieldPredicate (fieldName , cb , path , it ,
608
+ return getLogicalPredicate (fieldName , cb , path , it ,
609
609
argumentEnvironment (environment , args ),
610
610
arg );
611
611
})
@@ -631,7 +631,7 @@ private Predicate getFieldPredicate(String fieldName, CriteriaBuilder cb, From<?
631
631
isOptional = isOptionalAttribute (getAttribute (environment , argument ));
632
632
}
633
633
634
- return getArgumentPredicate (cb , reuseJoin (path , fieldName , isOptional ),
634
+ return getArgumentPredicate (cb , reuseFetch (path , fieldName , isOptional ),
635
635
wherePredicateEnvironment (environment , fieldDefinition , args ),
636
636
arg );
637
637
}
@@ -760,16 +760,27 @@ private Path<?> getCompoundJoinedPath(From<?,?> rootPath, String fieldName, bool
760
760
}
761
761
762
762
// trying to find already existing joins to reuse
763
- private Join <?,?> reuseJoin (From <?, ?> path , String fieldName , boolean outer ) {
763
+ private Join <?,?> reuseJoin (From <?, ?> from , String fieldName , boolean outer ) {
764
764
765
- for (Fetch <?,?> join : path . getFetches ()) {
765
+ for (Join <?,?> join : from . getJoins ()) {
766
766
if (join .getAttribute ().getName ().equals (fieldName )) {
767
- return ( Join <?,?>) join ;
767
+ return join ;
768
768
}
769
769
}
770
- return outer ? ( Join <?,?>) path . fetch (fieldName , JoinType .LEFT ) : ( Join <?,?>) path . fetch (fieldName );
770
+ return outer ? from . join (fieldName , JoinType .LEFT ) : from . join (fieldName );
771
771
}
772
772
773
+ // trying to find already existing fetch joins to reuse
774
+ private From <?,?> reuseFetch (From <?, ?> from , String fieldName , boolean outer ) {
775
+
776
+ for (Fetch <?,?> fetch : from .getFetches ()) {
777
+ if (fetch .getAttribute ().getName ().equals (fieldName )) {
778
+ return (From <?,?>) fetch ;
779
+ }
780
+ }
781
+ return outer ? (From <?,?>) from .fetch (fieldName , JoinType .LEFT ) : (From <?,?>) from .fetch (fieldName );
782
+ }
783
+
773
784
@ SuppressWarnings ( { "unchecked" , "rawtypes" } )
774
785
protected Object convertValue (DataFetchingEnvironment environment , Argument argument , Value value ) {
775
786
if (value instanceof NullValue ) {
0 commit comments