仅获取特定列的JPA方法之一是请求一个Tuple对象。
在您的情况下,您需要编写如下内容:
CriteriaQuery<Tuple> cq = builder.createTupleQuery();// write the Root, Path elements as usualRoot<EntityClazz> root = cq.from(EntityClazz.class);cq.multiselect(root.get(EntityClazz_.ID), root.get(EntityClazz_.VERSION)); //using metamodelList<Tuple> tupleResult = em.createQuery(cq).getResultList();for (Tuple t : tupleResult) { Long id = (Long) t.get(0); Long version = (Long) t.get(1);}如果您有一个代表结果的类(例如
T您的情况),则可以采用另一种方法。
T不必是Entity类。如果
T具有类似的构造函数:
public T(Long id, Long version)
那么您可以
T直接在
CriteriaQuery构造函数中使用:
CriteriaQuery<T> cq = builder.createQuery(T.class);// write the Root, Path elements as usualRoot<EntityClazz> root = cq.from(EntityClazz.class);cq.multiselect(root.get(EntityClazz_.ID), root.get(EntityClazz_.VERSION)); //using metamodelList<T> result = em.createQuery(cq).getResultList();
请参阅此链接以获取更多参考。



