首页 > 解决方案 > 编写等效于 pojo/entity/ 类的 graphql 模式

问题描述

我的应用程序中的实体类如下。

@Entity
public class User{
@Id
@Column(name = "userId")
Long userId;

@Column(name = "name")

@OneToMany(fetch = FetchType.EAGER, mappedBy="user", cascade = cascadeType.ALL)
@JsonIgnoreProperties("user")
String name;
List<PhoneNumber> phoneNumbers;

//setters ans getters
}

@Entity
Public class PhoneNumber{
@Id
@Column
Long phoneid;

String PhoneNo;

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "userId")
@JsonIgnoreProperties("phoneNumbers")
User user;
//setters and getters
}

在上述实体类中。我有两种情况:

  1. 一对多关系用户有很多电话号码(电话号码列表)

  2. 多对一关系多个电话号码属于一个用户

我需要双向获取数据。我如何编写 user.graphqls 和 phonenumber.graphqls 文件来表示这些实体和 graphqlseolvers。我无法获取数据。我遇到了以下异常

类型 java.util.Set 不能映射到 GraphQL 类型!由于 GraphQL-Java 在运行时处理已擦除的类型,因此只有非参数化类可以表示 GraphQL 类型。

这允许通过接口和联合类型中的 java 类进行反向查找。

标签: javaspring-bootspring-data-jpagraphql

解决方案


在 GraphQL 中,您需要使用类型定义实体/文档。
请为您的问题找到以下类型定义:

type User{
 userId :Long
 phoneNumbers :[PhoneNumber]
}

type PhoneNumber{
 phoneid :  Long
 PhoneNo  : String
 user: User
}

推荐阅读