Как удалить базу данных или коллекцию с помощью Hibernate OGM с MongoDB

Я не могу удалить базы данных или коллекции с помощью Hibernate OGM. Я пытался использовать эти собственные запросы, но для обоих было выбрано исключение.

entityManagerFactory = Persistence.createEntityManagerFactory("myPersistence-unit");
EntityManager entityManager = openEntityManager( entityManagerFactory);
entityManager.getTransaction().begin();

    String queryDropCollection = "db.Person.drop()";
    String queryDropDB = "db.dropDatabase()";

    entityManager.createNativeQuery(queryDropCollection).executeUpdate();
    entityManager.createNativeQuery(queryDropDB).executeUpdate();

entityManager.getTransaction().commit();
entityManager.close();

Исключение для удаления коллекции:

Exception in thread "main" com.mongodb.util.JSONParseException: 
db.Person.drop()
^

Исключение для удаления базы данных:

Exception in thread "main" com.mongodb.util.JSONParseException: 
db.dropDatabase()
^

person PotatoMan    schedule 22.03.2018    source источник


Ответы (2)


Извините, сейчас это невозможно.

Я не уверен, что было бы хорошей идеей удалить базу данных, пока OGM использует ее.

Я создал эти две проблемы, чтобы следить за этим:

Спасибо за ответ. Если вы хотите помочь нам еще больше, вы можете попытаться решить проблемы в проекте и отправить нам исправление. Мы поможем тебе.

person Davide    schedule 23.03.2018
comment
Спасибо за вашу помощь в любом случае. Мне просто нужно сделать это для целей тестирования, поэтому я могу запустить скрипт, который включает многократное удаление коллекций или баз данных. Я понимаю, почему в живой системе это было бы не так полезно. - person PotatoMan; 23.03.2018
comment
Что касается меня, то я не понимаю, как правильно тестировать без удаления баз данных или коллекций, учитывая, как я начал получать повторяющиеся ключевые ошибки во второй раз, когда запускал тест. - person Kira Resari; 18.06.2020

Итак, просто чтобы привести конкретный пример того, как использовать это в тестах, я добавляю этот ответ.

Мой рабочий повторяемый тестовый класс с использованием OGM и MongoDB выглядит так:

class OgmAccessorTest {

    private static EntityManagerFactory entityManagerFactory;
    private static EntityManager entityManager;
    private static TransactionManager transactionManager;

    @BeforeAll
    static void initialize() {
        entityManagerFactory = Persistence.createEntityManagerFactory("ogm-mongodb");
        entityManager = entityManagerFactory.createEntityManager();
        transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager();
    }

    @BeforeEach
    void clearDatabase() throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException {
        transactionManager.begin();
  // Collection == name of the class being saved ⮧
        entityManager.createNativeQuery("db.GameCharacter.drop()").executeUpdate();
        transactionManager.commit();
    }

    @Test
    void writeShouldBeAbleToWriteRetreivableGameCharacterToMongoDB() throws SecurityException, IllegalStateException, NotSupportedException, SystemException, HeuristicMixedException, HeuristicRollbackException, RollbackException {

        GameCharacter sylvia = GameCharacters.sylvia();

        OgmAccessor.write(sylvia, entityManagerFactory);

        transactionManager.begin();
        GameCharacter loadedGameCharacter
            = entityManager.find(GameCharacter.class, sylvia._id);

        assertNotNull(loadedGameCharacter);
    }
}
person Kira Resari    schedule 18.06.2020