用于可迭代对象的 Java GraphQL 解析器:休眠异常
Posted
技术标签:
【中文标题】用于可迭代对象的 Java GraphQL 解析器:休眠异常【英文标题】:Java GraphQL Resolver for iterable object: Hibernate Exception 【发布时间】:2019-10-29 22:52:51 【问题描述】:我正在使用 Spring Boot 实现 GraphQL 服务器,但是,在为具有多对多关系的模型编写解析器时遇到了一些麻烦。以下解析器类中的函数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】:我通过将fetch=FetchType.Eager
添加到我的多对多装饰器来解决此问题。
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL )
这显然不是大规模的高性能解决方案。
【讨论】:
以上是关于用于可迭代对象的 Java GraphQL 解析器:休眠异常的主要内容,如果未能解决你的问题,请参考以下文章
python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明