Мне нравится идея именованных запросов в 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»).