Spring Data JPA createCuery для замены? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть абстрактный класс репозитория, в котором я вычисляю запрос гибернации (как String), и для этой String мне также нужно создать запрос count. До недавнего времени я использовал QueryUtils.createCountQueryFor(String), который был помечен как устаревший в более новых версиях spring-data-jpa.

Их решение заключается в использовании DeclaredQuery.deriveCountQuery(String, String). Однако DeclaredQuery вместе со всеми реализующими его подклассами не имеет открытого идентификатора, поэтому не могут использоваться вне своих пакетов.

Какие решения у меня есть (с помощью spring-data-jpa) для создания запроса на подсчет из запроса выбора без использования этого устаревшего метода?

1 Ответ

0 голосов
/ 25 мая 2019

Лучший ответ для этих случаев, я думаю, - перейти непосредственно к коду.

Единственные реализации для 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, и его не следует использовать.Я понимаю вашу потребность в запросе на подсчет, хотя, некоторое время назад я оказался в похожей ситуации - в этом случае мы в итоге реализовали нашу собственную версию запроса на подсчет.

...