JPA & Criteria API - Выберите только определенные столбцы

Я хотел бы выбрать только определенные столбцы (напр. SELECT a FROM b). У меня есть универсальный ДАО и что я придумал:

public List<T> getAll(boolean idAndVersionOnly) {
    CriteriaBuilder builder = manager.getCriteriaBuilder();
    CriteriaQuery<T> criteria = builder.createQuery(entityClazz);
    Root<T> root = criteria.from(entityClazz);
    if (idAndVersionOnly) {
        criteria.select(root.get("ID").get("VERSION")); // HERE IS ERROR
    } else {
        criteria.select(root);
    }
    return manager.createQuery(criteria).getResultList();
}

И ошибка: The method select(Selection<? extends T>) in the type CriteriaQuery<T> is not applicable for the arguments (Path<Object>). Как я должен изменить это? Я хочу получить тип T объект, который имеет только ID и VERSION поля и все другие null.

Ввести T расширяется AbstractEntity который имеет те 2 поля.

entityClazz T.class.

58
задан 21 March 2017 в 18:42

1 ответ

Можно сделать что-то вроде этого

Session session = app.factory.openSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery();
Root<Users> root = query.from(Users.class);
query.select(root.get("firstname"));
String name = session.createQuery(query).getSingleResult();

, где можно изменить "firstname" с названием столбца, Вы хотите.

-3
ответ дан 1 November 2019 в 14:33

Другие вопросы по тегам:

Похожие вопросы: