Skip to content

Commit 5327a22

Browse files
authored
fix: correct element collection fetch sort order (#149)
* fix: correct element collection fetch sort order * fix: remove @ignore from queryOrderByFieldsNested
1 parent 2065101 commit 5327a22

File tree

2 files changed

+54
-12
lines changed

2 files changed

+54
-12
lines changed

graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/JpaPredicateBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929
import javax.persistence.criteria.CriteriaBuilder;
3030
import javax.persistence.criteria.Expression;
31-
import javax.persistence.criteria.Fetch;
3231
import javax.persistence.criteria.From;
32+
import javax.persistence.criteria.Join;
3333
import javax.persistence.criteria.Path;
3434
import javax.persistence.criteria.Predicate;
3535
import javax.persistence.metamodel.EntityType;
@@ -420,15 +420,16 @@ else if(Collection.class.isAssignableFrom(type)) {
420420
|| EntityType.class.isInstance(from.getModel())) {
421421
From<?,?> join = null;
422422

423-
for(Fetch<?,?> fetch: from.getFetches()) {
423+
for(Join<?,?> fetch: from.getJoins()) {
424424
if(fetch.getAttribute().getName().equals(filter.getField()))
425425
join = (From<?,?>) fetch;
426426
}
427427

428428
if(join == null) {
429-
join = (From<?,?>) from.fetch(filter.getField());
429+
join = (From<?,?>) from.join(filter.getField());
430430
}
431431

432+
432433
Predicate in = join.in(value);
433434

434435
if(filter.getCriterias().contains(PredicateFilter.Criteria.NIN))

graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/StarwarsQueryExecutorTests.java

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,9 @@ public void queryByCollectionOfEnumsAtRootLevel() {
401401

402402

403403
String expected = "{Humans={select=["
404-
+ "{name=Luke Skywalker, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
405-
+ "{name=Han Solo, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
406-
+ "{name=Leia Organa, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}"
404+
+ "{name=Luke Skywalker, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
405+
+ "{name=Han Solo, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
406+
+ "{name=Leia Organa, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}"
407407
+ "]}}";
408408

409409
//when:
@@ -684,6 +684,47 @@ public void queryWithWhereInsideOneToManyRelationsNotExisting() {
684684

685685
@Test
686686
public void queryWithWhereInsideCompositeRelationsAndCollectionFiltering() {
687+
//given:
688+
String query = "query {" +
689+
" Characters(where: {\n" +
690+
" friends: {appearsIn: {IN: A_NEW_HOPE}}\n" +
691+
" }) {\n" +
692+
" select {\n" +
693+
" id\n" +
694+
" name\n" +
695+
" appearsIn\n" +
696+
" friends(where: {name: {LIKE: \"Leia\"}}) {\n" +
697+
" id\n" +
698+
" name\n" +
699+
" }\n" +
700+
" }\n" +
701+
" }\n" +
702+
"}";
703+
704+
String expected = "{Characters={select=["
705+
+ "{id=1000, name=Luke Skywalker, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS], friends=["
706+
+ "{id=1003, name=Leia Organa}"
707+
+ "]}, "
708+
+ "{id=1002, name=Han Solo, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS], friends=["
709+
+ "{id=1003, name=Leia Organa}"
710+
+ "]}, "
711+
+ "{id=2000, name=C-3PO, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS], friends=["
712+
+ "{id=1003, name=Leia Organa}"
713+
+ "]}, "
714+
+ "{id=2001, name=R2-D2, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS], friends=["
715+
+ "{id=1003, name=Leia Organa}"
716+
+ "]}"
717+
+ "]}}";
718+
719+
//when:
720+
Object result = executor.execute(query).getData();
721+
722+
//then:
723+
assertThat(result.toString()).isEqualTo(expected);
724+
}
725+
726+
@Test
727+
public void queryWithWhereInsideCompositeRelationsAndCollectionFiltering2() {
687728
//given:
688729
String query = "query {" +
689730
" Humans(where: {" +
@@ -1167,11 +1208,11 @@ public void queryWithNestedWhereSearchCriteriaShouldFetchElementCollectionsAttri
11671208
"}";
11681209

11691210
String expected = "{Characters={select=["
1170-
+ "{id=1000, name=Luke Skywalker, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
1171-
+ "{id=1002, name=Han Solo, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
1172-
+ "{id=1003, name=Leia Organa, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
1173-
+ "{id=2000, name=C-3PO, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}, "
1174-
+ "{id=2001, name=R2-D2, appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]}"
1211+
+ "{id=1000, name=Luke Skywalker, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1212+
+ "{id=1002, name=Han Solo, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1213+
+ "{id=1003, name=Leia Organa, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1214+
+ "{id=2000, name=C-3PO, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1215+
+ "{id=2001, name=R2-D2, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}"
11751216
+ "]}}";
11761217

11771218
//when:
@@ -1207,7 +1248,7 @@ public void queryWithNestedWhereCompoundSearchCriteriaShouldFetchElementCollecti
12071248
+ "name=Luke Skywalker, "
12081249
+ "homePlanet=Tatooine, "
12091250
+ "favoriteDroid={name=C-3PO}, "
1210-
+ "appearsIn=[A_NEW_HOPE, THE_FORCE_AWAKENS, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI]"
1251+
+ "appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]"
12111252
+ "}]}}";
12121253

12131254
//when:

0 commit comments

Comments
 (0)