Как получить только определенные поля объекта в 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>
.