jpa2.2.10 JpaSpecificationExecutor Specification 查询时,会将所有字段查询,指定查询字段怎么写
时间: 2023-06-05 21:05:37 浏览: 121
可以使用 JPA 中的 CriteriaQuery 和 Root 对象来实现指定查询字段。具体实现可以参考以下代码:
```java
public List<User> getUsersWithSpecifiedFields() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
// 指定要查询的字段
query.select(cb.construct(User.class, root.get("id"), root.get("name")));
// 添加查询条件
Specification<User> specification = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.get("status"), UserStatus.ACTIVE));
return cb.and(predicates.toArray(new Predicate[0]));
};
// 执行查询
TypedQuery<User> typedQuery = entityManager.createQuery(query.where(specification));
return typedQuery.getResultList();
}
```
在这个例子中,我们使用 CriteriaQuery 来构建查询语句,并使用 Root 对象来获取实体类中的字段。通过指定要查询的字段,可以实现查询结果只包含所需的字段。在查询条件中,我们使用了 JpaSpecificationExecutor 接口来添加查询条件,并将其与 CriteriaQuery 组合在一起执行查询。
阅读全文