Как использовать аннотацию @Query для запросов mongodb вместе с такими методами репозитория, как findTopJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как использовать аннотацию @Query для запросов mongodb вместе с такими методами репозитория, как findTop

Сообщение Anonymous »


У меня есть существующий репозиторий mongo, в котором не используются аннотации @Query, например

// модель @Document(коллекция="фу") общественный класс Foo { частный строковый идентификатор; частная строка businessKey; частная Дата созданияДата; } // репозиторий общедоступный интерфейс FooRepo расширяет MongoRepository { Foo findTopByBusinessKeyOrderByCreatedDateAsc (String businessKey); } Но мне нужно расширить этот репозиторий (как другую версию этой модели), в котором появится еще одно поле, и мне нужно обрабатывать код, в котором эти поля заполнены по-другому. В модель добавлено больше полей, чем я описал здесь. Обратите внимание, что они оба записаны в одну и ту же коллекцию foo. Новый Foo выглядит так

@Document(коллекция="фу") общественный класс NewFoo { частный строковый идентификатор; частная строка businessKey; частная Дата созданияДата; // добавлен частная строка newField; // ... другие новые поля } Поскольку мне нужно, чтобы существующее репозиторий работал без изменений, я подумал, что, возможно, мне удастся обойтись явным добавлением фильтра с помощью @Query в существующий репозиторий, например

общедоступный интерфейс FooRepo расширяет MongoRepository { // добавляем сюда явный @Query, чтобы добавить этот дополнительный фильтр @Query("{ businessKey: ?0, newField: { $exists: false } }") Foo findTopByBusinessKeyOrderByCreatedDateAsc (String businessKey); } // репозиторий NewFoo общедоступный интерфейс NewFooRepo расширяет MongoRepository { // весь новый код использует это для определенных функций, которые зависят // на новых полях } Но, похоже, это не совсем работает для FooRepo, поскольку @Query, похоже, предназначен только для фильтрации, проецирования и сортировки, но не для установки ограничения на набор результатов (в моем случае для быть 1).

Является ли создание пользовательской реализации для FooRepo, требующей реализации множества методов вручную, единственным вариантом, если я воспользуюсь этим подходом? Это выполнимо, но болезненно.

Мне было интересно, есть ли какой-нибудь волшебный интерфейс, который я мог бы реализовать, чтобы я мог просто добавить в фильтр это дополнительное поле и даже не беспокоиться об аннотации @Query, возможно?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»