Мне нравится идея Named Queries в JPA для статических запросов, которые я собираюсь делать, но часто хочу получить результат подсчета для запроса, а также список результатов из некоторого подмножества запроса. Я бы предпочел не писать два почти одинаковых NamedQueries. В идеале, то, что я хотел бы иметь, это что-то вроде:
@NamedQuery(name = "getAccounts", query = "SELECT a FROM Account")
.
.
Query q = em.createNamedQuery("getAccounts");
List r = q.setFirstResult(s).setMaxResults(m).getResultList();
int count = q.getCount();
Итак, пусть m - 10, s - 0, а в Account - 400 строк. Я ожидал бы, что r будет иметь список из 10 элементов в нем, но я хотел бы знать, что всего 400 строк. Я мог бы написать второй @NamedQuery:
@NamedQuery(name = "getAccountCount", query = "SELECT COUNT(a) FROM Account")
но, похоже, это СУХОЕ нарушение, если я всегда буду хотеть подсчет. В этом простом случае легко синхронизировать два, но если запрос изменится, кажется, что он не идеален, что мне нужно обновить оба @NamedQueries, чтобы поддерживать значения в строке.
Общим вариантом использования здесь будет выборка некоторого подмножества элементов, но необходимо указать способ подсчета общего количества ( "Отображение 1-10 из 400" ).