java - 如何使用 JPA 标准仅选择某些字段
问题描述
我有一个 Student 实体,并且只想选择两个字段 -id
和age
. 在阅读了不同的帖子后,我编写了以下代码:
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 提供程序来做到这一点?
解决方案
如果您只需要两个字段并使用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);
推荐阅读
- python - 使用带有 Python 和 PyCharm 的 Kubeflow Pipelines SDK 连接到 AI Platform Pipelines
- json - 数据工厂使用查询创建json
- javascript - SyntaxError:无效的递增/递减操作数
- javascript - api 块被调用 2 次,导致渲染组件两次,尽管条件得到了正确检查
- android - 我如何在 Room 数据库查询中获得今天
- java - log4j DailyRollingFileAppender 滚动两次
- symfony5 - EasyAdmin - 删除操作,同时删除一个物理文件
- javascript - 如何在 laravel 中使用 sweetalert 使用问题提醒?
- c++ - 尽管包含了包含文件,但此范围事件中未声明某些类型
- botframework - 调度程序 LUIS 应用是否可以用作另一个调度程序 LUIS 模型的一部分?