diff --git a/README.md b/README.md
index f0f8a65bb..0d9021690 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ GraphQL Query for JPA Entity Model
[](https://mvnrepository.com/artifact/com.introproventures/graphql-jpa-query)
[](https://jitpack.io/#introproventures/graphql-jpa-query)
-This library uses [graphql-java 6.0](https://github.com/andimarek/graphql-java) to derive and build the GraphQL schema from JPA Entity Schema provided by entity classes.
+This library uses [graphql-java 9.4](https://github.com/andimarek/graphql-java) to derive and build the GraphQL schema from JPA Entity Schema provided by entity classes.
It implements a schema builder to generate GraphQL Schema using JPA EntityManager with JPA Query Data Fetchers that transform GraphQL queries into JPA queries with flexible type safe criteria expressions and user-friendly SQL query syntax semantics i.e. query by page, , where criteria expressions, select, order by etc.
diff --git a/graphql-jpa-query-annotations/pom.xml b/graphql-jpa-query-annotations/pom.xml
index 2cf548827..864741b70 100644
--- a/graphql-jpa-query-annotations/pom.xml
+++ b/graphql-jpa-query-annotations/pom.xml
@@ -5,9 +5,9 @@
com.introproventures
- graphql-jpa-query
+ graphql-jpa-query-dependencies0.3.8-SNAPSHOT
- ../pom.xml
+ ../graphql-jpa-query-dependencies4.0.0
diff --git a/graphql-jpa-query-boot-starter/pom.xml b/graphql-jpa-query-boot-starter/pom.xml
index be59a622e..b15cb7c34 100644
--- a/graphql-jpa-query-boot-starter/pom.xml
+++ b/graphql-jpa-query-boot-starter/pom.xml
@@ -6,9 +6,9 @@
com.introproventures
- graphql-jpa-query
+ graphql-jpa-query-build0.3.8-SNAPSHOT
- ../pom.xml
+ ../graphql-jpa-query-build
diff --git a/graphql-jpa-query-build/pom.xml b/graphql-jpa-query-build/pom.xml
new file mode 100644
index 000000000..90e51dcc7
--- /dev/null
+++ b/graphql-jpa-query-build/pom.xml
@@ -0,0 +1,51 @@
+
+ 4.0.0
+
+ com.introproventures
+ graphql-jpa-query-dependencies
+ 0.3.8-SNAPSHOT
+ ../graphql-jpa-query-dependencies
+
+ graphql-jpa-query-build
+ pom
+
+
+
+
+
+ io.spring.platform
+ platform-bom
+ Brussels-SR6
+ pom
+ import
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+ test
+
+
+
+ com.h2database
+ h2
+ test
+
+
+
+
+
\ No newline at end of file
diff --git a/graphql-jpa-query-dependencies/pom.xml b/graphql-jpa-query-dependencies/pom.xml
new file mode 100644
index 000000000..1e0d0e196
--- /dev/null
+++ b/graphql-jpa-query-dependencies/pom.xml
@@ -0,0 +1,56 @@
+
+ 4.0.0
+
+ com.introproventures
+ graphql-jpa-query
+ 0.3.8-SNAPSHOT
+ ..
+
+ graphql-jpa-query-dependencies
+ pom
+
+
+ 9.4
+ 1.0.0.Final
+
+
+
+
+
+
+ com.graphql-java
+ graphql-java
+ ${graphql-java.version}
+
+
+
+ org.hibernate.javax.persistence
+ hibernate-jpa-2.1-api
+ ${hibernate-jpa-2.1-api.version}
+
+
+
+ com.introproventures
+ graphql-jpa-query-annotations
+ ${project.version}
+
+
+
+ com.introproventures
+ graphql-jpa-query-schema
+ ${project.version}
+
+
+
+ com.introproventures
+ graphql-jpa-query-boot-starter
+ ${project.version}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/graphql-jpa-query-example/pom.xml b/graphql-jpa-query-example/pom.xml
index d632fef9a..862a08281 100644
--- a/graphql-jpa-query-example/pom.xml
+++ b/graphql-jpa-query-example/pom.xml
@@ -6,9 +6,9 @@
com.introproventures
- graphql-jpa-query
+ graphql-jpa-query-build0.3.8-SNAPSHOT
- ../pom.xml
+ ../graphql-jpa-query-build
diff --git a/graphql-jpa-query-schema/pom.xml b/graphql-jpa-query-schema/pom.xml
index 9f788a7f3..0b4b644f2 100644
--- a/graphql-jpa-query-schema/pom.xml
+++ b/graphql-jpa-query-schema/pom.xml
@@ -1,66 +1,67 @@
-
- graphql-jpa-query-schema
- graphql-jpa-query-schema
+
+ graphql-jpa-query-schema
+ graphql-jpa-query-schema
-
- com.introproventures
- graphql-jpa-query
- 0.3.8-SNAPSHOT
- ../pom.xml
-
-
- 4.0.0
-
-
+
+ com.introproventures
+ graphql-jpa-query-build
+ 0.3.8-SNAPSHOT
+ ../graphql-jpa-query-build
+
-
- com.introproventures
- graphql-jpa-query-annotations
-
+ 4.0.0
-
- com.graphql-java
- graphql-java
-
+
-
- org.atteo
- evo-inflector
-
+
+ com.introproventures
+ graphql-jpa-query-annotations
+
-
- org.slf4j
- slf4j-api
-
+
+ com.graphql-java
+ graphql-java
+
-
- joda-time
- joda-time
- true
-
+
+ org.atteo
+ evo-inflector
+
-
- org.hibernate.javax.persistence
- hibernate-jpa-2.1-api
- 1.0.0.Final
-
+
+ org.slf4j
+ slf4j-api
+
-
- javax.transaction
- javax.transaction-api
-
+
+ joda-time
+ joda-time
+ true
+
-
- javax.interceptor
- javax.interceptor-api
-
+
+ org.hibernate.javax.persistence
+ hibernate-jpa-2.1-api
+
-
- org.springframework.boot
- spring-boot-starter-data-jpa
- test
-
+
+ javax.transaction
+ javax.transaction-api
+
+
+
+ javax.interceptor
+ javax.interceptor-api
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+ test
+
+
+
-
-
\ No newline at end of file
diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaQueryDataFetcher.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaQueryDataFetcher.java
index c2519c432..7c8f33a2c 100644
--- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaQueryDataFetcher.java
+++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaQueryDataFetcher.java
@@ -94,7 +94,8 @@ public Object get(DataFetchingEnvironment environment) {
environment.getFragmentsByName(),
environment.getExecutionId(),
environment.getSelectionSet(),
- environment.getFieldTypeInfo()
+ environment.getFieldTypeInfo(),
+ environment.getExecutionContext()
)).orElse(environment);
queryField = new Field(fieldName, field.getArguments(), recordsSelection.get().getSelectionSet());
diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java
index 8fbe8c48e..dd3450893 100644
--- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java
+++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/GraphQLJpaSchemaBuilder.java
@@ -443,7 +443,7 @@ private GraphQLFieldDefinition getObjectField(Attribute attribute) {
if (type instanceof GraphQLOutputType) {
List arguments = new ArrayList<>();
- DataFetcher dataFetcher = new PropertyDataFetcher<>(attribute.getName());
+ DataFetcher dataFetcher = PropertyDataFetcher.fetching(attribute.getName());
// Only add the orderBy argument for basic attribute types
if (attribute instanceof SingularAttribute
diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/QraphQLJpaBaseDataFetcher.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/QraphQLJpaBaseDataFetcher.java
index d64089bca..9ba15b478 100644
--- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/QraphQLJpaBaseDataFetcher.java
+++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/QraphQLJpaBaseDataFetcher.java
@@ -63,6 +63,7 @@
import graphql.language.FloatValue;
import graphql.language.IntValue;
import graphql.language.Node;
+import graphql.language.NodeVisitor;
import graphql.language.ObjectField;
import graphql.language.ObjectValue;
import graphql.language.SelectionSet;
@@ -78,6 +79,8 @@
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import graphql.schema.GraphQLType;
+import graphql.util.TraversalControl;
+import graphql.util.TraverserContext;
/**
* Provides base implemetation for GraphQL JPA Query Data Fetchers
@@ -318,7 +321,8 @@ protected Predicate getWherePredicate(CriteriaBuilder cb, Root> root, From,
environment.getFragmentsByName(),
environment.getExecutionId(),
environment.getSelectionSet(),
- environment.getFieldTypeInfo()
+ environment.getFieldTypeInfo(),
+ environment.getExecutionContext()
), new Argument(Logical.AND.name(), whereValue)
);
}
@@ -420,7 +424,8 @@ private PredicateFilter getPredicateFilter(ObjectField objectField, DataFetching
environment.getFragmentsByName(),
environment.getExecutionId(),
environment.getSelectionSet(),
- environment.getFieldTypeInfo()
+ environment.getFieldTypeInfo(),
+ environment.getExecutionContext()
),
new Argument(objectField.getName(), argument.getValue()), argument.getValue() );
@@ -444,7 +449,8 @@ public ArgumentEnvironment(DataFetchingEnvironment environment, String argumentN
environment.getFragmentsByName(),
environment.getExecutionId(),
environment.getSelectionSet(),
- environment.getFieldTypeInfo()
+ environment.getFieldTypeInfo(),
+ environment.getExecutionContext()
);
}
}
@@ -465,7 +471,8 @@ public WherePredicateEnvironment(DataFetchingEnvironment environment, GraphQLFie
environment.getFragmentsByName(),
environment.getExecutionId(),
environment.getSelectionSet(),
- environment.getFieldTypeInfo()
+ environment.getFieldTypeInfo(),
+ environment.getExecutionContext()
);
}
}
@@ -821,6 +828,18 @@ public List getComments() {
public boolean isEqualTo(Node node) {
return node instanceof NullValue;
}
+
+ @Override
+ public TraversalControl accept(TraverserContext context, NodeVisitor visitor) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Value deepCopy() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/graphql-jpa-query-schema/src/main/java/graphql/schema/PropertyDataFetcher.java b/graphql-jpa-query-schema/src/main/java/graphql/schema/PropertyDataFetcher.java
deleted file mode 100644
index 855a509a2..000000000
--- a/graphql-jpa-query-schema/src/main/java/graphql/schema/PropertyDataFetcher.java
+++ /dev/null
@@ -1,288 +0,0 @@
-package graphql.schema;
-
-import static graphql.Scalars.GraphQLBoolean;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.function.Function;
-
-import graphql.Assert;
-import graphql.GraphQLException;
-import graphql.PublicApi;
-
-/**
- * This is the default data fetcher used in graphql-java. It will examine
- * maps and POJO java beans for values that match the desired name, typically the field name
- * or it will use a provided function to obtain values.
- * maps and POJO java beans for values that match the desired name.
- *
- * It uses the following strategies
- *
- *
If the source is null, return null
- *
If the source is a Map, return map.get(propertyName)
- *
If a function is provided, it is used
- *
Find a public JavaBean getter method named `propertyName`
- *
Find any getter method named `propertyName` and call method.setAccessible(true)
- *
Find a public field named `propertyName`
- *
Find any field named `propertyName` and call field.setAccessible(true)
- *
If this cant find anything, then null is returned
- *
- *
- * You can write your own data fetchers to get data from some other backing system
- * if you need highly customised behaviour.
- *
- * @see graphql.schema.DataFetcher
- */
-@PublicApi
-public class PropertyDataFetcher implements DataFetcher {
-
- private final String propertyName;
- private final Function