Skip to content

Commit ca7f78e

Browse files
authored
fix: lets fetch element collection attributes (#123)
1 parent 7ff25ae commit ca7f78e

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ protected final List<Argument> getFieldArguments(Field field, CriteriaQuery<?> q
198198
boolean isOptional = (PersistentAttributeType.MANY_TO_MANY == attribute.getPersistentAttributeType());
199199

200200
reuseJoin(from, selectedField.getName(), isOptional);
201+
202+
// Let's fetch element collections to avoid filtering their values used where search criteria
203+
if(PersistentAttributeType.ELEMENT_COLLECTION == attribute.getPersistentAttributeType()) {
204+
from.fetch(selectedField.getName());
205+
}
201206
}
202207
}
203208
}

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

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,6 +1141,72 @@ public void queryWithWhereOneToManyRelationsShouldUseLeftOuterJoinAndApplyCriter
11411141
//then:
11421142
assertThat(result.toString()).isEqualTo(expected);
11431143
}
1144+
1145+
@Test
1146+
public void queryWithNestedWhereSearchCriteriaShouldFetchElementCollectionsAttributes() {
1147+
//given:
1148+
String query = "query { " +
1149+
" Characters (where: {" +
1150+
" appearsIn :{IN: THE_FORCE_AWAKENS}" +
1151+
" }) {" +
1152+
" select {" +
1153+
" id, " +
1154+
" name," +
1155+
" appearsIn" +
1156+
" }" +
1157+
" }" +
1158+
"}";
1159+
1160+
String expected = "{Characters={select=["
1161+
+ "{id=1000, name=Luke Skywalker, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1162+
+ "{id=1002, name=Han Solo, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1163+
+ "{id=1003, name=Leia Organa, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1164+
+ "{id=2000, name=C-3PO, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}, "
1165+
+ "{id=2001, name=R2-D2, appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]}"
1166+
+ "]}}";
1167+
1168+
//when:
1169+
Object result = executor.execute(query).getData();
1170+
1171+
//then:
1172+
assertThat(result.toString()).isEqualTo(expected);
1173+
}
11441174

11451175

1176+
@Test
1177+
public void queryWithNestedWhereCompoundSearchCriteriaShouldFetchElementCollectionsAttributes() {
1178+
//given:
1179+
String query = "query { " +
1180+
" Humans(where:{" +
1181+
" favoriteDroid: {name: {EQ: \"C-3PO\"}} " +
1182+
" appearsIn: {IN: [THE_FORCE_AWAKENS]}" +
1183+
" }) {" +
1184+
" select {" +
1185+
" id" +
1186+
" name" +
1187+
" homePlanet" +
1188+
" favoriteDroid {" +
1189+
" name" +
1190+
" }" +
1191+
" appearsIn" +
1192+
" }" +
1193+
" }" +
1194+
"}";
1195+
1196+
String expected = "{Humans={select=[{"
1197+
+ "id=1000, "
1198+
+ "name=Luke Skywalker, "
1199+
+ "homePlanet=Tatooine, "
1200+
+ "favoriteDroid={name=C-3PO}, "
1201+
+ "appearsIn=[A_NEW_HOPE, EMPIRE_STRIKES_BACK, RETURN_OF_THE_JEDI, THE_FORCE_AWAKENS]"
1202+
+ "}]}}";
1203+
1204+
//when:
1205+
Object result = executor.execute(query).getData();
1206+
1207+
//then:
1208+
assertThat(result.toString()).isEqualTo(expected);
1209+
}
1210+
1211+
11461212
}

0 commit comments

Comments
 (0)