Как получить только определенные поля объекта в JPQL или HQL? Что эквивалентно ResultSet в JPQL или HQL?

В JPQL я могу получить объекты:

query = entityManager.createQuery("select c from Category c");
List<Category> categories = query.getResultList();

Но если я хочу получить поля id и name (только) объекта Category, мне нужно что-то вроде объекта ResultSet, через который я могу сказать: rs.getString("name") и rs.getString("id"). Как это сделать с помощью JPQL, без получения всего объекта?

В принципе, для получения информации из запроса, например: select c.id,c.name from Category c?

Ответы

Ответ 1

В HQL вы можете использовать функцию list() для получения списка массива Object [], который содержит строки результатов:

Query query = session.createQuery("select c.id,c.name from Category c");
List<Object[]> rows = query.list();

в возвращаемом массиве 1-й элемент будет id, second-name.

for (Object[] row: rows) {
    System.out.println(" ------------------- ");
    System.out.println("id: " + row[0]);
    System.out.println("name: " + row[1]);
}

Если вы хотите использовать hibernate Criteria API, вы должны использовать Projections.

С JPA он будет работать одинаково:

List<Object[]> rows = entityManager.createQuery(queryString).getResultList();

Ответ 2

Это не использование самой функции .list(), которая делает результат a List<Object[]>. Это спецификация полей (c.id, c.name) в запросе HQL. Если ваш запрос

    "select c from Category c"

Затем query.list() вернет объект List<Category>.