You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么参数类型为`String!`的mutation函数可以传入null值执行?

问题原因

  1. 该现象是低版本Hasura GraphQL引擎的设计差异导致的,核心是查询和变更操作对变量类型的校验逻辑不一致。
  2. 查询操作的校验严格遵循GraphQL类型规范:你在查询语句中声明了$test_value: String!(非空字符串类型),传入null会直接触发GraphQL层面的类型校验失败,这和你观察到的结果一致。
  3. 低版本Hasura的变更操作校验优先对齐数据库约束:对于插入类变更,当传入的null值匹配数据库对应字段的可空属性时,Hasura会跳过GraphQL层面的非空校验,直接将null写入数据库。你的test_value字段本身是可空的TEXT类型,所以插入操作直接执行成功。
  4. 可以做个验证:将test_value字段修改为非空TEXT类型,再执行相同的传null的变更操作,此时就会触发预期的校验错误。

修复方案

  • 升级Hasura到v2.10.0及以上版本,该版本已经修复了校验逻辑不一致的问题,变更操作也会严格遵循GraphQL的非空类型约束。
  • 暂时无法升级的情况下,在业务代码层提前做变量非空校验,避免不符合预期的null值写入数据库。

内容的提问来源于stack exchange,提问作者Amantel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:06:04