Не удается вернуть модель при удалении одного документа из Spring MongoRepository - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь найти и удалить указанный c документ из MongoRepository в программе Spring. Документация дает примеры Person deleteSingleByLastname(String lastname) и Optional<Person> deleteByBirthdate(Date birthdate) как методов, которые могут быть использованы для sh этого. Однако когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке: 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 года.

Ответы [ 2 ]

1 голос
/ 09 июля 2020
  • Эта поддержка присутствует в 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>
0 голосов
/ 09 июля 2020

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

...