3232import javax .persistence .metamodel .Attribute ;
3333import javax .persistence .metamodel .EmbeddableType ;
3434import javax .persistence .metamodel .EntityType ;
35+ import javax .persistence .metamodel .ManagedType ;
3536import javax .persistence .metamodel .PluralAttribute ;
3637import javax .persistence .metamodel .SingularAttribute ;
3738import 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
0 commit comments