首页 > 解决方案 > 如何使用 JPA 标准仅选择某些字段

问题描述

我有一个 Student 实体,并且只想选择两个字段 -idage. 在阅读了不同的帖子后,我编写了以下代码:

CriteriaQuery<Student> criteriaQuery = ..
var root = criteriaQuery.from(Student.class);
criteriaQuery.multiselect(root.get("id"), root.get("age"));
typedQuery = entityManager.createQuery(criteriaQuery);
List<Student> students = typedQuery.getResultList();

但是,它不起作用。如何使用休眠 jpa 提供程序来做到这一点?

标签: javahibernatejpa

解决方案


如果您只需要两个字段并使用multiselect,则可以使用 TupleQuery,如下例所示:

CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();
var root = criteriaQuery.from(Student.class);

criteriaQuery.multiselect(root.get("id"), root.get("age"));

typedQuery = entityManager.createQuery(criteriaQuery);

List<Tuple> students = typedQuery.getResultList();

要访问元组的值,请使用get它的方法。

例如:

Long id = (Long) students.get(0).get(0);

推荐阅读