JPQL使这种变化变得非常简单:
Select o from Orders as o where....
Select o.id from Orders as o where....
但在Criteria Query中:
CriteriaBuilder builder = kem.getCriteriaBuilder();
CriteriaQuery<Orders> query = builder.createQuery(Orders.class);
Root<Order> orders= query.from(Orders.class);
query.select(orders);
....
看起来选择项是由builder.createQuery(Order.class)定义的,没有任何灵活性。
我知道我们可以使用Tuple.class,但除了比较复杂的查询还有更好的方法来获得额外的id(只有一个字段)吗?没有这样的特征标准查询becomase非常缺乏灵活性。
答案 0 :(得分:4)
您必须使用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
的元模型类。