有没有一种简单的方法可以使用标准查询来选择实体的 id?

Dre*_*mer 2 ejb jpa jpql jakarta-ee

JPQL 使这种更改非常容易:

Select o from Orders as o where....

Select o.id from Orders as o where....
Run Code Online (Sandbox Code Playgroud)

但在标准查询中:

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

看起来选择项是由 builder.createQuery(Order.class) 定义的,没有任何灵活性。

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

man*_*ish 6

JPA元模型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));
Run Code Online (Sandbox Code Playgroud)

这里,Orders_Orders实体的元模型类。