问题标签 [graphql-spqr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
969 浏览

graphql - 当我只要求几个时,为什么graphql java会查询实体中的所有字段?

我使用spring boot 启动器创建了一个基本的graphql-java应用程序,并使用graphql spqr库针对使用HibernateJpa的MSSQL 数据库

我有一个名为“任务”的实体,有 5 个字段。我有一个简单的 Jpa 存储库和一个调用“findAllTask​​s”方法的简单 Jpa 服务。它工作得很好,但是如果我指定,例如,只用 graphiql 查询一个字段,我可以通过我的 SQL 日志看到执行的 select 命令正在查询我的任务实体/表中的所有字段,而不是我想要的. 这是预期的吗?我以为 graphql 只选择您在查询命令中指定的字段?

这是我的代码:

实体

存储库

服务

当我在 graphiql 中运行以下命令时:

我得到以下从我的日志生成的 SQL 语句:

0 投票
2 回答
692 浏览

java - 带有 Spring Boot 和事务边界的 graphql-spqr

我们将 graphql-spqr 和 graphql-spqr-spring-boot-starter 用于一个新项目(使用 Spring DataJPA、hibernate 等)。

我们有一个这样的突变:

这种突变工作正常:

我省略了变量,因为它们并不重要。如果我将其更改为:

我得到一个 LazyInitalizationException ,我知道为什么:

homeTeam 由 ID 引用并由teamRepository. 返回的团队只是一个休眠代理。这对于保存新匹配很好,不需要更多。但是为了发回结果,GraphQL 需要访问代理并调用 match.team.getName()。但这显然发生在标有 的事务之外@Transactional

我可以使用 Team homeTeam teamRepository.findById(matchForm.getHomeId()).orElse(null); 修复它 match.setHomeTeam(主队);

Hibernate 不再加载代理,而是加载真实对象。但是由于我不知道 GraphQL 查询到底要求什么,所以如果以后不需要,急切地加载所有数据是没有意义的。如果 GraphQL 能够在@Transactional.

对此有什么建议吗?

PS:我剥离了代码并进行了一些清理以使其更简洁。所以代码可能无法运行,但确实说明了问题。

0 投票
1 回答
248 浏览

java - 如何使用 spring-spqr graphql-spqr-spring-boot-starter graphQL 的注释创建片段

使用graphql-spqr-spring-boot-startergraphql-spqr但无法使用 @GraphQLDirective 创建片段,不确定是否有办法这样做。

我的意图是通过像这样的代码来创建片段

并在下面的查询中使用这个片段,有人可以指导我使用的注释是什么

0 投票
1 回答
520 浏览

graphql-spqr - GraphQL SPQR - 如何获取客户端使用查询请求的字段列表

有没有办法检索客户端在 GraphQL 查询中请求的字段列表?

假设我有以下类型:

在使用@GraphQLQuery 注释的方法中,Java 端是否有办法知道客户端请求的字段?

例如,有以下查询:

我可以知道第一个查询要求书的标题和流派字段,第二个要求书的标题以及作者的姓名和姓氏?

谢谢马西莫

0 投票
0 回答
356 浏览

java - 如何使用 graphql-spqr 访问字段级 Graphql 指令

给定一个 graphql 查询

和graphql服务器实现使用graphql-spqr

如果它存在,我可以访问(arg:2)查询 foo,如果不存在则回(arg:1)退到。

但是,如果我想在字段 foo 和 foobar 上阅读它,我会遇到问题。

我想让它不可读,滥用@GraphqlContext每个字段。有没有更简单的方法可以在字段级别存档一些简单的逻辑(例如大写、语言环境、舍入、数字格式)。


也试过dataFetchingEnvironment.getSelectionSet().get().getSubField("edge/node/foo/bar").getSingleField().getDirective()不接受父母的指令


0 投票
1 回答
1039 浏览

graphql - 找不到导致 graphql.AssertException 的原因:对象必须不为空

我目前正在学习 Spring Boot 和 GraphQL。对于 graphql,我正在使用 graphql spqr 库并且遇到了 graphql 错误。我可以使用 localhost:8080/gui 通过我的 graphql api 进行查询和突变,但是当我使用 Postman 或从我的前端拨打电话时,我收到以下错误消息。在 gui 中,端点似乎仍然是 /graphql,但是当我将同一个端点与 Postman 或 axios 一起使用时,我得到了错误。

这是我的服务类:

我的安全配置:

我不知道是什么原因造成的,任何帮助将不胜感激。

解决方案:将 spqr 版本从 0.10.0 更改为 0.9.9

0 投票
1 回答
278 浏览

graphql-spqr - 有没有办法在@GraphqQuery 方法中读取请求标头

我需要从我的 graphql 查询解析器中的请求标头中读取数据。

使用 graphql-spqr 库。

方法样本。

0 投票
0 回答
132 浏览

graphql-java - GraphQL-SPQR 库是否已准备好生产?

我正在处理现有的 REST API 项目并尝试使用 graphql-spqr 库将其迁移到 GraphQL。有人可以帮我看看这个库是否可以生产吗?有人在他们的产品中使用过 spqr 库吗?

提前致谢!

0 投票
0 回答
80 浏览

graphql - 如何在 GraphQL 中针对当前用户创建突变?

我正在尝试创建一种变异方法来将电影添加到用户最喜欢的列表中,但我不确定如何构建变异以包含指定的用户。

我有一个查询来查看用户可能拥有的所有收藏夹,看起来像这样。

这是查询方法

但我不确定如何针对特定用户编写突变

这是我添加收藏夹的突变方法,目前我只是因为一个空用户而得到一个 NullPointerException。

0 投票
1 回答
436 浏览

java - 我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphql-spqr-spring-boot-starter)?

我正在使用graphql-spqr-spring-boot-starter库将现有的 Rest API 项目迁移到 GraphQL。我有一段代码可以HttpServletRequestRequestContextHolderRest API 中获取电流:

但是,这会为 GraphQL 返回 null。我相信这是正确的,因为对于 GraphQL,我们必须使用DefaultGlobalContext<ServletWebRequest>而不是HttpServletRequest. 但我不确定我们该怎么做。

但是,我尝试了下面的代码:

但它不起作用 -requestAttributes返回 null。

我对 GraphQL 很陌生,谁能帮我知道如何获得 GraphQL 的 HttpServletRequest (DefaultGlobalContext)?这将不胜感激。