Как удалить базу данных или коллекцию, используя 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()
^
1 ответ
Решение
Извините, сейчас это невозможно.
Я не уверен, что было бы хорошей идеей удалить базу данных, пока OGM ее использует.
Я создал эти две проблемы, чтобы отследить это:
- Drop db: https://hibernate.atlassian.net/browse/OGM-1432
- Удалить коллекцию: https://hibernate.atlassian.net/browse/OGM-1433
Спасибо за ответ. Если вы хотите помочь нам еще больше, вы можете попытаться решить проблемы в проекте и отправить нам исправление. Мы поможем тебе.
Итак, чтобы дать конкретный пример того, как использовать это в тестах, я добавляю этот ответ.
Мой рабочий повторяемый тестовый класс с использованием 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);
}
}