Skip to content

Commit 95ad2ad

Browse files
authored
Merge pull request #54 from ludovicmotte/embeddedWhere
query for entity with emeddableType and where argument
2 parents aa59732 + c1f2e48 commit 95ad2ad

File tree

2 files changed

+39
-37
lines changed

2 files changed

+39
-37
lines changed

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

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import javax.persistence.metamodel.Attribute;
3333
import javax.persistence.metamodel.EmbeddableType;
3434
import javax.persistence.metamodel.EntityType;
35+
import javax.persistence.metamodel.ManagedType;
3536
import javax.persistence.metamodel.PluralAttribute;
3637
import javax.persistence.metamodel.SingularAttribute;
3738
import javax.persistence.metamodel.Type;
@@ -194,12 +195,19 @@ private GraphQLFieldDefinition getQueryFieldSelectDefinition(EntityType<?> entit
194195
.build();
195196
}
196197

197-
private Map<EntityType<?>, GraphQLArgument> whereArgumentsMap = new HashMap<>();
198-
199-
private GraphQLArgument getWhereArgument(EntityType<?> entityType) {
200-
String type = namingStrategy.pluralize(entityType.getName())+"CriteriaExpression";
198+
private Map<ManagedType<?>, GraphQLArgument> whereArgumentsMap = new HashMap<>();
199+
200+
private GraphQLArgument getWhereArgument(ManagedType<?> managedType) {
201+
String typeName="";
202+
if (managedType instanceof EmbeddableType){
203+
typeName = managedType.getJavaType().getSimpleName()+"EmbeddableType";
204+
} else if (managedType instanceof EntityType) {
205+
typeName = ((EntityType)managedType).getName();
206+
}
207+
208+
String type = namingStrategy.pluralize(typeName)+"CriteriaExpression";
201209

202-
GraphQLArgument whereArgument = whereArgumentsMap.get(entityType);
210+
GraphQLArgument whereArgument = whereArgumentsMap.get(managedType);
203211

204212
if(whereArgument != null)
205213
return whereArgument;
@@ -219,7 +227,7 @@ private GraphQLArgument getWhereArgument(EntityType<?> entityType) {
219227
.type(new GraphQLTypeReference(type))
220228
.build()
221229
)
222-
.fields(entityType.getAttributes().stream()
230+
.fields(managedType.getAttributes().stream()
223231
.filter(this::isValidInput)
224232
.filter(this::isNotIgnored)
225233
.map(this::getWhereInputField)
@@ -233,7 +241,7 @@ private GraphQLArgument getWhereArgument(EntityType<?> entityType) {
233241
.type(whereInputObject)
234242
.build();
235243

236-
whereArgumentsMap.put(entityType, whereArgument);
244+
whereArgumentsMap.put(managedType, whereArgument);
237245

238246
return whereArgument;
239247

@@ -457,22 +465,17 @@ private GraphQLFieldDefinition getObjectField(Attribute attribute) {
457465
}
458466

459467
// Get the fields that can be queried on (i.e. Simple Types, no Sub-Objects)
460-
if (attribute instanceof SingularAttribute
461-
&& attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.BASIC
462-
&& attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.EMBEDDED
463-
) {
464-
465-
EntityType foreignType = (EntityType) ((SingularAttribute) attribute).getType();
466-
Stream<Attribute> attributes = findBasicAttributes(foreignType.getAttributes());
468+
if (attribute instanceof SingularAttribute
469+
&& attribute.getPersistentAttributeType() != Attribute.PersistentAttributeType.BASIC) {
470+
ManagedType foreignType = (ManagedType) ((SingularAttribute) attribute).getType();
467471

468472
// TODO fix page count query
469473
arguments.add(getWhereArgument(foreignType));
470474

471-
} // Get Sub-Objects fields queries via DataFetcher
475+
} // Get Sub-Objects fields queries via DataFetcher
472476
else if (attribute instanceof PluralAttribute
473477
&& (attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.ONE_TO_MANY
474-
|| attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_MANY)
475-
) {
478+
|| attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_MANY)) {
476479
EntityType declaringType = (EntityType) ((PluralAttribute) attribute).getDeclaringType();
477480
EntityType elementType = (EntityType) ((PluralAttribute) attribute).getElementType();
478481

@@ -498,9 +501,9 @@ private Stream<Attribute<?,?>> findBasicAttributes(Collection<Attribute<?,?>> at
498501

499502
@SuppressWarnings( "rawtypes" )
500503
private GraphQLType getAttributeType(Attribute<?,?> attribute) {
501-
504+
502505
if (isBasic(attribute)) {
503-
return getGraphQLTypeFromJavaType(attribute.getJavaType());
506+
return getGraphQLTypeFromJavaType(attribute.getJavaType());
504507
}
505508
else if (isEmbeddable(attribute)) {
506509
EmbeddableType embeddableType = (EmbeddableType) ((SingularAttribute) attribute).getType();
@@ -518,7 +521,7 @@ else if (isElementCollection(attribute)) {
518521
Type foreignType = ((PluralAttribute) attribute).getElementType();
519522

520523
if(foreignType.getPersistenceType() == Type.PersistenceType.BASIC) {
521-
return new GraphQLList(getGraphQLTypeFromJavaType(foreignType.getJavaType()));
524+
return new GraphQLList(getGraphQLTypeFromJavaType(foreignType.getJavaType()));
522525
}
523526
}
524527

@@ -542,12 +545,12 @@ protected final boolean isElementCollection(Attribute<?,?> attribute) {
542545
}
543546

544547
protected final boolean isToMany(Attribute<?,?> attribute) {
545-
return attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.ONE_TO_MANY
548+
return attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.ONE_TO_MANY
546549
|| attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_MANY;
547550
}
548551

549552
protected final boolean isToOne(Attribute<?,?> attribute) {
550-
return attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_ONE
553+
return attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.MANY_TO_ONE
551554
|| attribute.getPersistentAttributeType() == Attribute.PersistentAttributeType.ONE_TO_ONE;
552555
}
553556

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -375,21 +375,20 @@ public void queryForEntityWithEmeddableType() {
375375
// then
376376
assertThat(result.toString()).isEqualTo(expected);
377377
}
378-
379-
// // TODO
380-
// @Test
381-
// public void queryForEntityWithEmeddableTypeAndWhere() {
382-
// //given
383-
// String query = "{ Boats { id engine(where: { identification: { EQ: \"12345\"}}) { identification } } }";
384-
//
385-
// String expected = "{Boats={select[id=1, engine={identification=12345}]}}";
386-
//
387-
// //when
388-
// Object result = executor.execute(query).getData();
389-
//
390-
// // then
391-
// assertThat(result.toString()).isEqualTo(expected);
392-
// }
378+
379+
@Test
380+
public void queryForEntityWithEmeddableTypeAndWhere() {
381+
//given
382+
String query = "{ Boats { select { id engine(where: { identification: { EQ: \"12345\"}}) { identification } } } }";
383+
384+
String expected = "{Boats={select=[{id=1, engine={identification=12345}}]}}";
385+
386+
//when
387+
Object result = executor.execute(query).getData();
388+
389+
// then
390+
assertThat(result.toString()).isEqualTo(expected);
391+
}
393392

394393

395394

0 commit comments

Comments
 (0)