Лучший ответ для этих случаев, я думаю, - перейти непосредственно к коду.
Единственные реализации для DeclaredQuery
: StringQuery
и EmptyDeclaredQuery
.Если мы проверим StringQuery
(для последней ветки, в настоящее время 2.1.x), это единственный внутренний член, который вычисляет запрос подсчета, подобный тому, который вам нужен:
@Override
@SuppressWarnings("deprecation")
public DeclaredQuery deriveCountQuery(@Nullable String countQuery, @Nullable String countQueryProjection) {
return DeclaredQuery
.of(countQuery != null ? countQuery : QueryUtils.createCountQueryFor(
query, countQueryProjection));
}
Но, как вы можете видетьэтот класс все еще использует устаревший метод QueryUtils.createCountQueryFor()
(обратите внимание на @SuppressWarnings("deprecation")
в сигнатуре метода), который говорит нам, что даже соавторы spring-data-jpa
еще не имеют альтернативы.Таким образом, я тем временем продолжу использовать устаревший метод и буду следить за этой реализацией, чтобы найти альтернативу в будущих выпусках.
В качестве примечания, тот факт, что DeclaredQuery
не является общедоступным членом, говоритнам, что не является частью публичного API, и его не следует использовать.Я понимаю вашу потребность в запросе на подсчет, хотя, некоторое время назад я оказался в похожей ситуации - в этом случае мы в итоге реализовали нашу собственную версию запроса на подсчет.