我使用spring boot 启动器创建了一个基本的graphql-java应用程序,并使用graphql spqr库针对使用Hibernate和Jpa的MSSQL 数据库。
我有一个名为“任务”的实体,有 5 个字段。我有一个简单的 Jpa 存储库和一个调用“findAllTasks”方法的简单 Jpa 服务。它工作得很好,但是如果我指定,例如,只用 graphiql 查询一个字段,我可以通过我的 SQL 日志看到执行的 select 命令正在查询我的任务实体/表中的所有字段,而不是我想要的. 这是预期的吗?我以为 graphql 只选择您在查询命令中指定的字段?
这是我的代码:
实体
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@Column
public String desc;
@Column
public LocalDateTime createdOn;
@Column
public LocalDateTime modifiedOn;
@Column
public String owner;
}
存储库
@Repository
public interface TaskRepository extends JpaRepository<Task, Long> {}
服务
@GraphQLApi
@Service
public class TaskService {
private TaskRepository taskRepo;
@Autowired
public TaskService(TaskRepository taskRepo) {
this.taskRepo = taskRepo;
}
@GraphQLQuery
public List<Task> findAllTasks() {
return taskRepo.findAll();
}
}
当我在 graphiql 中运行以下命令时:
query {
findAllTasks {
id
}
}
我得到以下从我的日志生成的 SQL 语句:
select task0_.id as Task1_1_0_. task0_.desc as Task1_2_0, task0_.createdOn as Task1_3_0, task0_.modifiedOn as Task1_4_0, task0_.owner as Task1_4_0 from Task as task0_