Nano Hash - криптовалюты, майнинг, программирование

Не удается вернуть модель при удалении одного документа из Spring MongoRepository

Я пытаюсь найти и удалить определенный документ из MongoRepository в программе Spring. документация приводит примеры Person deleteSingleByLastname(String lastname) и Optional<Person> deleteByBirthdate(Date birthdate) в качестве методов, которые можно использовать для достижения этой цели. Однако, когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке: class java.lang.Long cannot be cast to class [my model class]. Я нашел этот вопрос, который похож, но не упоминает ключевое слово deleteSingleBy... из документации, которую я пытаюсь использовать .

Вот что я пробовал:

@Repository
public interface SomeModelRepository extends MongoRepository<SomeModel, String> {
  // This one works
  List<SomeModel> removeByKey(String key);

  //...and all of these don't
  Optional<SomeModel> removeByKey(String key);
  Optional<SomeModel> removeSingleByKey(String key);
  Optional<SomeModel> deleteByKey(String key);
  Optional<SomeModel> deleteSinglByKey(String key);

  @Nullable
  SomeModel removeByKey(String key);
  @Nullable
  SomeModel removeSingleByKey(String key);
  @Nullable
  SomeModel deleteByKey(String key);
  @Nullable
  SomeModel deleteSingleByKey(String key);
}

Почему это не работает? Я использую версию spring-boot-starter-data-mongodb от февраля 2020 года.


  • @KavithakaranKanapathippillai Похоже на 2.2.4; Я пытался обновить некоторые вещи, но я не самый опытный с Maven, и в итоге я сломал все еще хуже. 09.07.2020

Ответы:


1
  • Эта поддержка присутствует в 3.0.1.RELEASE версии spring-data-mongodb
   Changes in version 3.0.0.M3 (2020-02-12)
   ----------------------------------------
   DATAMONGO-1997 - Add support to return the single deleted item 
   for a deleteBy query method.
   <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>3.0.1.RELEASE</version>
    </dependency>
09.07.2020

2

Когда вы удаляете что-то отличное от ключа, это вернет количество удаленных документов, поскольку у вас может быть более одного совпадения документов.
Возвращаясь к вашей проблеме, spring-data пытается преобразовать количество документов, возвращенных удалить запрос, который является длинным для объекта вашей модели. Итак, просто измените возвращаемые типы на Long

09.07.2020
  • Я знаю, что метод удаления может работать таким образом. Однако в документации также утверждается, что должен быть возможен метод deleteSingle, возвращающий удаленный документ. Я не могу изменить тип возврата на Long, потому что это не вернет удаленный документ. 09.07.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..