0
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/

1 Answer 1

1

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!
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.