Как обрабатывать поля идентификаторов в GraphQL SPQR

#graphql-spqr #graphql-spqr-spring-boot-starter

Вопрос:

Допустим, у меня есть

 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="trade_id")
    int tradeId;
 

Когда я запрошу это из базы данных, я захочу получить идентификатор сделки. Однако при выполнении создания, очевидно, у меня не будет tradeId, так как база данных будет генерировать его, когда я его вставлю.

 input TradeInput {
  tradeId: Int!
...
 

Но схема, которую SPQR генерирует для меня, устанавливает для этого поля значение Not Null, однако.

Поэтому мой вопрос в том, как предотвратить автоматическое появление этого поля как не пустого, чтобы мне не пришлось отправлять его при создании, но я мог его получить.

Ответ №1:

Такого int просто не может быть null . Но у вас есть несколько вариантов:

  • Превратите его в ID скалярный тип (используя @GraphQLId ) вместо Int
  • Задайте ему значение по умолчанию с помощью @GraphQLInputField
  • Используйте Integer вместо int , как Integer можно обнулить

Комментарии:

1. Спасибо! Это имеет смысл в отношении int/Integer. Кстати, по какой причине вы отредактировали свой ответ, чтобы не включать предложение использовать 0.0.6? Когда я пытаюсь это сделать, мне не удается проанализировать класс [io.leangen.graphql.spqr.spring.web.HttpExecutor] из загрузчика классов. Это известная проблема/поэтому вы отказались от своей рекомендации?

2. @Стив Ха, нет. Только потому, что вы не упомянули версию, которую используете здесь, поэтому я подумал, что было бы странно упоминать об этом ни с того ни с сего. Никогда не слышал о проблеме, о которой вы упоминали раньше… Если вы не разберетесь в этом быстро, пожалуйста, откройте проблему с минимальным примером, воспроизводящим ее.