How fradantim/spring-graphql-2-jpa works
This Spring GraphQL/JPA proof of concept turns GraphQL field selections into JPA fetch joins so requests fetch only the related entity graph they select. A client query reaches book resolvers, which pass the selection set to repository queries; the translator builds fetch clauses and JPA loads the book data. The project also generates a GraphQL schema and exposes multi-ID, POJO-input, and enum-echo operations. The shown code supports the resolver-to-query flow; details of schema discovery and runtime configuration are only partially excerpted.
Main entry points: BookRepository.java Book queries · Book.java Book entity · BookGraphQLController.java Book resolvers · Person.java Person entity
Components 12
GraphQL API
- Schema generation
src/main/java/com/fradantim/graphql2jpa/config/GraphQLConfig.java - Book resolvers
src/main/java/com/fradantim/graphql2jpa/controller/BookGraphQLController.java - Cover enum
src/main/java/com/fradantim/graphql2jpa/model/Cover.java
Selection-Based Fetching
- Book queries
src/main/java/com/fradantim/graphql2jpa/repository/BookRepository.java - Fetch translator
src/main/java/com/fradantim/graphql2jpa/utils/GraphQLEntityFetchTranslator.java - Relational database
Book Domain
- Book entity
src/main/java/com/fradantim/graphql2jpa/entity/Book.java - Person entity
src/main/java/com/fradantim/graphql2jpa/entity/Person.java - Country entity
src/main/java/com/fradantim/graphql2jpa/entity/Country.java - Quote entity
src/main/java/com/fradantim/graphql2jpa/entity/Quote.java - Missing entity
src/main/java/com/fradantim/graphql2jpa/entity/NonExistingEntity.java
Other components
- GraphQL client
Connections 10
- GraphQL client → Book resolvers: submits query
README.md - Book resolvers → Book queries: queries books
src/main/java/com/fradantim/graphql2jpa/controller/BookGraphQLController.java - Book resolvers → Cover enum: echoes enum
src/main/java/com/fradantim/graphql2jpa/controller/BookGraphQLController.java - Book queries → Fetch translator: builds fetches
src/main/java/com/fradantim/graphql2jpa/repository/BookRepository.java - Book queries → Relational database: executes JPQL
src/main/java/com/fradantim/graphql2jpa/repository/BookRepository.java - Book queries → Book entity: loads entities
src/main/java/com/fradantim/graphql2jpa/repository/BookRepository.java - Book entity → Person entity: references author and reviewers
src/main/java/com/fradantim/graphql2jpa/entity/Book.java - Book entity → Quote entity: references quotes
src/main/java/com/fradantim/graphql2jpa/entity/Book.java - Book entity → Missing entity: references collection
src/main/java/com/fradantim/graphql2jpa/entity/Book.java - Person entity → Country entity: references country
src/main/java/com/fradantim/graphql2jpa/entity/Person.java