|
30 | 30 | import javax.persistence.criteria.Root;
|
31 | 31 | import javax.persistence.metamodel.EntityType;
|
32 | 32 |
|
| 33 | +import org.slf4j.Logger; |
| 34 | +import org.slf4j.LoggerFactory; |
| 35 | + |
| 36 | +import com.introproventures.graphql.jpa.query.introspection.ReflectionUtil; |
| 37 | + |
33 | 38 | import graphql.language.Argument;
|
34 | 39 | import graphql.language.BooleanValue;
|
35 | 40 | import graphql.language.Field;
|
|
44 | 49 | *
|
45 | 50 | */
|
46 | 51 | class GraphQLJpaQueryDataFetcher extends QraphQLJpaBaseDataFetcher {
|
| 52 | + |
| 53 | + private final static Logger logger = LoggerFactory.getLogger(GraphQLJpaQueryDataFetcher.class); |
47 | 54 |
|
48 | 55 | private boolean defaultDistinct = true;
|
49 | 56 |
|
@@ -125,6 +132,9 @@ public Object get(DataFetchingEnvironment environment) {
|
125 | 132 | if(isDistinct) {
|
126 | 133 | query.setHint(HIBERNATE_QUERY_PASS_DISTINCT_THROUGH, false);
|
127 | 134 | }
|
| 135 | + if (logger.isDebugEnabled()) { |
| 136 | + logger.info("\nGraphQL JPQL Query String:\n {}", getJPQLQueryString(query)); |
| 137 | + } |
128 | 138 |
|
129 | 139 | // Let's execute query
|
130 | 140 | List<?> resultList = query.getResultList();
|
@@ -239,4 +249,22 @@ public Page(Integer page, Integer size) {
|
239 | 249 | }
|
240 | 250 | }
|
241 | 251 |
|
| 252 | + protected String getJPQLQueryString(TypedQuery<?> query) { |
| 253 | + try { |
| 254 | + Object queryImpl = query.unwrap(TypedQuery.class); |
| 255 | + |
| 256 | + java.lang.reflect.Field queryStringField = ReflectionUtil.getField(queryImpl.getClass(), |
| 257 | + "queryString"); |
| 258 | + |
| 259 | + ReflectionUtil.forceAccess(queryStringField); |
| 260 | + |
| 261 | + return queryStringField.get(queryImpl) |
| 262 | + .toString(); |
| 263 | + |
| 264 | + } catch (Exception ignored) { |
| 265 | + logger.error("Error getting JPQL string", ignored); |
| 266 | + } |
| 267 | + |
| 268 | + return null; |
| 269 | + } |
242 | 270 | }
|
0 commit comments