Я создал базовое c graphql- java приложение с пружинным загрузчиком и с использованием библиотеки graphql spqr против MS SQL база данных с использованием Hibernate и Jpa .
У меня есть объект под названием «Задача» с 5 полями. У меня есть простой репозиторий Jpa и простой сервис Jpa, который вызывает метод "findAllTasks". Это прекрасно работает, но если я укажу, например, только одно поле для запроса с graphiql, я смогу увидеть в моем журнале SQL, что выполненная команда выбора запрашивает ВСЕ поля в моей сущности / таблице Task, а не одно Я хочу. Это ожидается? Я думал, что GraphQl только выбирает поля, которые вы указываете в команде запроса?
Вот мой код:
Entity
@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_