有没有一种简单的方法可以使用条件查询来仅 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。
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。