有没有一种简单的方法可以使用条件查询来仅 select 实体的 id?

Is there a simple way to just select entity's id using criteria query?

JPQL 使这种更改变得非常容易:

Select o from Orders as o where....

Select o.id from Orders as o where....

但在条件查询中:

CriteriaBuilder builder = kem.getCriteriaBuilder();
CriteriaQuery<Orders> query = builder.createQuery(Orders.class);
Root<Order> orders= query.from(Orders.class);
query.select(orders);
....

看起来 select 项目已经由 builder.createQuery(Order.class) 定义,没有任何灵活性。

我知道我们可以使用 Tuple.class,但是除了 like 之外,还有什么更好的方法可以从复杂的查询中获取额外的 id(只有一个字段)?没有这样的特征条件查询变得非常缺乏灵活性。

JPA Metamodel API 可用于此。

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(String.class);
Root<Order> root = query.from(Orders.class);
query.select(root.get(Orders_.id));

此处,Orders_Orders 实体的元模型 class。