graphql-spqr не может запросить поле родительского класса - PullRequest
0 голосов
/ 02 ноября 2019

Я пытался реализовать классы сущностей, используя полиморфизм.

Это мой BaseEntity

@Getter
@Setter
@Accessors(chain = true)
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Size(max = 55, message = "name length more then 55")
  private String name;

  @Size(max = 255, message = "remark length more than 255")
  private String remark;

}

И моя сущность

@Data
@NoArgsConstructor
@Table(name = "sys_user")
@Entity(name = "sys_user")
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class SysUser extends BaseEntity implements Serializable {

  @NonNull
  private String username;

  @NonNull
  private String password;

}

В моем контроллере

@Controller
@GraphQLApi
@RequiredArgsConstructor
public class SysUserController implements BaseController {

  private final SysUserRepository sysUserRepository;

  @GraphQLQuery
  public List<SysUser> sysUsers() {
    return sysUserRepository.findAll();
  }

}

Мой GraphQL Config

@Configuration
@RequiredArgsConstructor
public class GraphQLConfig {

  private final @NotNull List<BaseController> controllerLists;

  @Bean
  public GraphQLSchema graphqlSchema() {
    GraphQLSchemaGenerator generator = new GraphQLSchemaGenerator();
    generator.withOperationsFromSingletons(controllerLists.toArray());
    return generator.generate();
  }

}

Теперь я пытаюсь получить

{
  sysUsers {
    username
  }
}

Результат правильный

{
  "data": {
    "sysUsers": [
      {
        "username": "Hello"
      }
    ]
  }
}

Но я пытаюсь получить поле родительского класса:

{
  sysUsers {
    name
  }
}

Я получу ошибку

{
  "errors": [
    {
      "message": "Validation error of type FieldUndefined: Field 'name' in type 'SysUser' is undefined @ 'sysUsers/name'",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ]
    }
  ]
}

Я использую io.leangen.graphql:graphql-spqr-spring-boot-starter:0.0.4

Как решить этот вопрос?

Спасибо!

...