Reputation: 297
type Person {
id: ID
name: String!
contact: Contact
}
type Query {
countPersons: Long!
findByName(name: String!): [Person]!
findAllPerson: [Person]!
}
type Contact {
id: ID
emailId: String
mobileNumber: String!
}
extend type Query {
findAllContact: [Contact]!
countContacts: Long!
findByMobileNumber(mobileNumber: String!): [Contact]!
findByEmailId(emailId: String!): [Contact]!
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "persons")
public class Person extends BaseAbstractEntity {
@Column(name="person_name", nullable = false)
private String name;
@OneToOne(fetch = javax.persistence.FetchType.LAZY)
@JoinColumn(name = "contact_id", referencedColumnName = "id")
private Contact contact;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "contacts")
public class Contact extends BaseAbstractEntity {
@Column(name="contact_email_id")
private String emailId;
@Column(name="contact_mobile_number", nullable = false)
private String mobileNumber;
@OneToOne(mappedBy = "contact")
private Person person;
}
public class Query implements GraphQLQueryResolver {
private final PersonRepository personRepository;
private final ContactRepository contactRepository;
public Query(PersonRepository personRepository, ContactRepository contactRepository) {
this.personRepository = personRepository;
this.contactRepository = contactRepository;
}
public Iterable<Person> findAllPerson() {
return personRepository.findAll();
}
}
Getting error on starting server:
com.coxautodev.graphql.tools.SchemaClassScannerError: Unable to match type definition (NonNullType{type=ListType{type=TypeName{name='Person'}}}) with java type (class com.demo.graphql.entities.Person): Java class is not a List or generic type information was lost: class com.demo.graphql.entities.Person
The application starts after commenting out findByName
and findAllPersonfindAllPerson
in query:
type Query {
countPersons: Long!
# findByName(name: String!): [Person]!
# findAllPerson: [Person]!
}
I think the issue is with [Person]
in query response which is a list of person.
Link to application: https://github.com/shubham-v/spring-boot-graphql-demo/
Upvotes: 0
Views: 1743
Reputation: 420
Looking in the shared repo:
public Person findByName(String name) {
return personRepository.findByName(name);
}
The resolver is returning a single Person
class object but the schema expects a list of Person
.
Try changing the schema to:
findByName(name: String!): Person!
Upvotes: 1