Метод удаления MongoRepository

Добрый день товарищи кодеры!

Я провел последний час, пытаясь удалить один документ из моей тестовой коллекции mongo. Я хотел бы использовать методы удаления / удаления All MongoRepository. Однако он не удаляет документ. Он сохраняется независимо от того, сколько раз я запускаю метод тестового класса. Об ошибках не сообщается, и у пользователя есть разрешения на чтение и запись в базе данных. Я могу запустить команду mongo, чтобы удалить вновь созданный тестовый документ.

Я прочитал об использовании шаблона mongo и создал его для выполнения удаления. Я рад сделать это, но я бы предпочел, чтобы это было как можно проще.

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.MongoId;

@Data
@Document(collection = "testCollection")
public class TestClass {
    @MongoId
    private String id;

    private String name;

    public TestClass(String name) {
        this.name = name;
    }
}

Проверить интерфейс репозитория класса Mongo

import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;

public interface TestClassRepository extends MongoRepository<TestClass, String> {
    public List<TestClass> findAllByName(String name);
    public void deleteAllByIdIn(List<TestClass> list);
}

Метод тестирования

import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@TestPropertySource(value = {"classpath:application.properties"})
@AutoConfigureMockMvc
public class testClassTest {
    @Autowired
    private TestClassRepository testClassRepository;

    @Test
    public void crudTest() {

        TestClass testObj = new TestClass("Test");
        testClassRepository.save(testObj);

        List<TestClass> testClassList = testClassRepository.findAllByName("Test");
        Assert.assertEquals(1, testClassList.size());

        TestClass test = testClassList.get(0);
        testClassRepository.deleteAllByIdIn(testClassList);

        // Fails this assertion: Found 1, expected 0.
        Assert.assertEquals(0, testClassRepository.findAllByName("Test").size());
    }
}

Как кто-нибудь еще сталкивался с подобной проблемой? Если да, то как вы решили это?

Спасибо!

Дополнения к исходному сообщению:

  1. Вот запрос монго, сгенерированный MongoRepository. Похоже, что на самом деле он не добавляет команду удаления монго в запрос. Запрос: { name : Test}, поля: {}, сортировка: {}

person ButtahNBred    schedule 22.05.2021    source источник
comment
Когда вы выполняете удаление, можете ли вы опубликовать, какая команда запускается в консоли?   -  person varman    schedule 23.05.2021


Ответы (1)


По счастливой случайности мне удалось разобраться в проблеме. Проблема заключалась в типе аннотации идентификатора, которую я использовал. Это объяснение от другого пользователя stackoverflow (Что такое использование @MongoId в Spring Data MongoDB вместо @Id?) заставил меня пересмотреть этот аспект модели.

Я переключил аннотацию идентификатора с @MongoId на @Id. Поскольку у меня есть аннотации JPA и MongoDB, мне нужно было убедиться, что я выбрал аннотацию из пакета org.springframework.data.annotation, а не из пакета javax.persistance.

Надеюсь, это объяснение поможет другим!

person ButtahNBred    schedule 23.05.2021