Java GraphQL Resolver для повторяемого объекта: исключение Hibernate - PullRequest
0 голосов
/ 15 июня 2019

Я внедряю сервер GraphQL с использованием Spring Boot, однако у меня возникают некоторые проблемы при написании распознавателей для моделей, которые имеют отношения «многие ко многим». Функция getBooks в следующем классе распознавателя выдает следующую ошибку:

package com.example.DemoGraphQL.resolver;

import java.util.Set;
import java.util.stream.Collectors;

import com.coxautodev.graphql.tools.GraphQLResolver;
import com.example.DemoGraphQL.model.Author;
import com.example.DemoGraphQL.model.Book;
import com.example.DemoGraphQL.repository.AuthorRepository;
import com.example.DemoGraphQL.repository.BookRepository;

public class AuthorResolver implements GraphQLResolver<Book> {
    private BookRepository bookRepository;

    public AuthorResolver(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    public Iterable<Book> getBooks(Author author) {
        Set<Long> ids = author.getBooks().stream().map(book -> book.getId()).collect(Collectors.toSet());
        return bookRepository.findAll(ids);
    }
}

Сообщение об ошибке:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.DemoGraphQL.model.Author.books, could not initialize proxy - no Session

Я могу реализовать аналогичный преобразователь, когда запрашиваю только один объект для данной модели. Любые предложения приветствуются.

1 Ответ

0 голосов
/ 15 июня 2019

Я решил эту проблему, добавив fetch=FetchType.Eager к своему декоратору «многие ко многим».

@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })

Это, очевидно, не эффективное решение в масштабе.

...